]> granicus.if.org Git - php/commitdiff
Apply new path encoding style to the rest of e/s/file.c
authorSara Golemon <pollita@php.net>
Mon, 2 Oct 2006 03:13:47 +0000 (03:13 +0000)
committerSara Golemon <pollita@php.net>
Mon, 2 Oct 2006 03:13:47 +0000 (03:13 +0000)
This layout is definately simpler to maintain
and every bit as functional as the other version.

ext/standard/file.c

index b03d8b869e84259c61c3acdbf2904ab68fd00236..036324fc4b18a3d5dceee087219a1300782ceab0 100644 (file)
@@ -358,9 +358,9 @@ PHP_FUNCTION(flock)
 
 PHP_FUNCTION(get_meta_tags)
 {
+       zval **ppfilename;
        char *filename;
        int filename_len;
-       zend_uchar filename_type;
        zend_bool use_include_path = 0;
        int in_tag = 0, done = 0;
        int looking_for_val = 0, have_name = 0, have_content = 0;
@@ -373,22 +373,14 @@ PHP_FUNCTION(get_meta_tags)
        memset(&md, 0, sizeof(md));
 
        /* Parse arguments */
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|b",
-                                                         &filename, &filename_len, &filename_type, &use_include_path) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|b", &ppfilename, &use_include_path) == FAILURE ||
+               php_stream_path_param_encode(ppfilename, &filename, &filename_len, REPORT_ERRORS, FG(default_context)) == FAILURE) {
                return;
        }
 
-       if (filename_type == IS_UNICODE) {
-               if (php_stream_path_encode(NULL, &filename, &filename_len, (UChar*)filename, filename_len, REPORT_ERRORS, FG(default_context)) == FAILURE) {
-                       RETURN_FALSE;
-               }
-       }
        md.stream = php_stream_open_wrapper(filename, "rt",
                        (use_include_path ? USE_PATH : 0) | REPORT_ERRORS,
                        NULL);
-       if (filename_type == IS_UNICODE) {
-               efree(filename);
-       }
        if (!md.stream) {
                RETURN_FALSE;
        }
@@ -534,9 +526,9 @@ PHP_FUNCTION(get_meta_tags)
    Read the entire file into a string */
 PHP_FUNCTION(file_get_contents)
 {
+       zval **ppfilename;
        char *filename;
        int filename_len;
-       zend_uchar filename_type;
        void *contents = NULL;
        long flags = 0;
        php_stream *stream;
@@ -547,24 +539,18 @@ PHP_FUNCTION(file_get_contents)
        php_stream_context *context = NULL;
 
        /* Parse arguments */
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|lr!ll",
-                                 &filename, &filename_len, &filename_type, &flags, &zcontext, &offset, &maxlen) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|lr!ll", &ppfilename, &flags, &zcontext, &offset, &maxlen) == FAILURE) {
                return;
        }
 
        context = php_stream_context_from_zval(zcontext, 0);
-       if (filename_type == IS_UNICODE) {
-               if (php_stream_path_encode(NULL, &filename, &filename_len, (UChar*)filename, filename_len, REPORT_ERRORS, context) == FAILURE) {
-                       RETURN_FALSE;
-               }
+       if (php_stream_path_param_encode(ppfilename, &filename, &filename_len, REPORT_ERRORS, context) == FAILURE) {
+               RETURN_FALSE;
        }
 
        stream = php_stream_open_wrapper_ex(filename, (flags & PHP_FILE_TEXT) ? "rt" : "rb", 
                                ((flags & PHP_FILE_USE_INCLUDE_PATH) ? USE_PATH : 0) | REPORT_ERRORS,
                                NULL, context);
-       if (filename_type == IS_UNICODE) {
-               efree(filename);
-       }
        if (!stream) {
                RETURN_FALSE;
        }
@@ -616,9 +602,9 @@ PHP_FUNCTION(file_put_contents)
 {
        int argc = ZEND_NUM_ARGS();
        php_stream *stream;
+       zval **ppfilename;
        char *filename;
        int filename_len;
-       zend_uchar filename_type;
        zval *data;
        int numchars = 0;
        long flags = ((argc < 3) && UG(unicode)) ? PHP_FILE_TEXT : 0;
@@ -627,8 +613,7 @@ PHP_FUNCTION(file_put_contents)
        char mode[3] = { 'w', 0, 0 };
        php_stream *srcstream = NULL;
        
-       if (zend_parse_parameters(argc TSRMLS_CC, "tz/|lr!", &filename, &filename_len, &filename_type,
-                               &data, &flags, &zcontext) == FAILURE) {
+       if (zend_parse_parameters(argc TSRMLS_CC, "Zz/|lr!", &ppfilename, &data, &flags, &zcontext) == FAILURE) {
                return;
        }
 
@@ -637,6 +622,9 @@ PHP_FUNCTION(file_put_contents)
        }
 
        context = php_stream_context_from_zval(zcontext, flags & PHP_FILE_NO_DEFAULT_CONTEXT);
+       if (php_stream_path_param_encode(ppfilename, &filename, &filename_len, REPORT_ERRORS, context) == FAILURE) {
+               RETURN_FALSE;
+       }
 
        if (flags & PHP_FILE_APPEND) {
                mode[0] = 'a';
@@ -647,18 +635,8 @@ PHP_FUNCTION(file_put_contents)
                mode[1] = 't';
        }
 
-       if (filename_type == IS_UNICODE) {
-               if (php_stream_path_encode(NULL, &filename, &filename_len, (UChar*)filename, filename_len, REPORT_ERRORS, context) == FAILURE) {
-                       RETURN_FALSE;
-               }
-       }
-
        stream = php_stream_open_wrapper_ex(filename, mode, 
                        ((flags & PHP_FILE_USE_INCLUDE_PATH) ? USE_PATH : 0) | REPORT_ERRORS, NULL, context);
-
-       if (filename_type == IS_UNICODE) {
-               efree(filename);
-       }
        if (stream == NULL) {
                RETURN_FALSE;
        }
@@ -785,9 +763,9 @@ PHP_FUNCTION(file_put_contents)
 /* UTODO: Accept unicode contents */
 PHP_FUNCTION(file)
 {
+       zval **ppfilename;
        char *filename;
        int filename_len;
-       zend_uchar filename_type;
        char *target_buf=NULL;
        register int i = 0;
        int target_len;
@@ -801,7 +779,7 @@ PHP_FUNCTION(file)
        php_stream_context *context = NULL;
 
        /* Parse arguments */
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|lr!", &filename, &filename_len, &filename_type, &flags, &zcontext) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|lr!", &ppfilename, &flags, &zcontext) == FAILURE) {
                return;
        }
        if (flags < 0 || flags > (PHP_FILE_USE_INCLUDE_PATH | PHP_FILE_IGNORE_NEW_LINES | PHP_FILE_SKIP_EMPTY_LINES | PHP_FILE_NO_DEFAULT_CONTEXT | PHP_FILE_TEXT)) {
@@ -815,16 +793,11 @@ PHP_FUNCTION(file)
        text_mode = flags & PHP_FILE_TEXT;
 
        context = php_stream_context_from_zval(zcontext, flags & PHP_FILE_NO_DEFAULT_CONTEXT);
-
-       if (filename_type == IS_UNICODE) {
-               if (php_stream_path_encode(NULL, &filename, &filename_len, (UChar*)filename, filename_len, REPORT_ERRORS, context) == FAILURE) {
-                       RETURN_FALSE;
-               }
+       if (php_stream_path_param_encode(ppfilename, &filename, &filename_len, REPORT_ERRORS, context) == FAILURE) {
+               RETURN_FALSE;
        }
+
        stream = php_stream_open_wrapper_ex(filename, text_mode ? "rt" : "rb", (use_include_path ? USE_PATH : 0) | REPORT_ERRORS, NULL, context);
-       if (filename_type == IS_UNICODE) {
-               efree(filename);
-       }
        if (!stream) {
                RETURN_FALSE;
        }
@@ -925,40 +898,26 @@ parse_eol:
    Create a unique filename in a directory */
 PHP_FUNCTION(tempnam)
 {
+       zval **ppdir, **ppprefix;
        char *dir, *prefix;
        int dir_len, prefix_len;
-       zend_uchar dir_type, prefix_type;
-       zend_uchar free_dir = 0, free_prefix = 0;
 
-       char *d;
        char *opened_path;
        char *p;
        int fd;
        size_t p_len;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "tt", &dir, &dir_len, &dir_type, &prefix, &prefix_len, &prefix_type) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ", &ppdir, &ppprefix) == FAILURE) {
                return;
        }
 
-       /* Assume failure until success is assured */
-       RETVAL_FALSE;
-
-       if (dir_type == IS_UNICODE) {
-               if (FAILURE == php_stream_path_encode(NULL, &dir, &dir_len, (UChar*)dir, dir_len, REPORT_ERRORS, FG(default_context))) {
-                       goto tempnam_cleanup;
-               }
-               free_dir = 1;
-       }
-
-       if (prefix_type == IS_UNICODE) {
-               if (FAILURE == php_stream_path_encode(NULL, &prefix, &prefix_len, (UChar*)prefix, prefix_len, REPORT_ERRORS, FG(default_context))) {
-                       goto tempnam_cleanup;
-               }
-               free_prefix = 1;
+       if (php_stream_path_param_encode(ppdir, &dir, &dir_len, REPORT_ERRORS, FG(default_context)) == FAILURE ||
+               php_stream_path_param_encode(ppprefix, &prefix, &prefix_len, REPORT_ERRORS, FG(default_context)) == FAILURE) {
+               RETURN_FALSE;
        }
 
        if (php_check_open_basedir(dir TSRMLS_CC)) {
-               goto tempnam_cleanup;
+               RETURN_FALSE;
        }
 
        php_basename(prefix, prefix_len, NULL, 0, &p, &p_len TSRMLS_CC);
@@ -981,14 +940,6 @@ PHP_FUNCTION(tempnam)
                }
        }
        efree(p);
-
-tempnam_cleanup:
-       if (free_dir) {
-               efree(dir);
-       }
-       if (free_prefix) {
-               efree(prefix);
-       }
 }
 /* }}} */
 
@@ -1074,20 +1025,18 @@ PHPAPI PHP_FUNCTION(fclose)
    Execute a command and open either a read or a write pipe to it */
 PHP_FUNCTION(popen)
 {
+       zval **ppcommand;
        char *command, *mode;
        int command_len, mode_len;
-       zend_uchar command_type;
        FILE *fp;
        char *posix_mode;
        
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ts", &command, &command_len, &command_type, &mode, &mode_len) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zs", &ppcommand, &mode, &mode_len) == FAILURE) {
                return;
        }
 
-       if (command_type == IS_UNICODE) {
-               if (FAILURE == php_stream_path_encode(NULL, &command, &command_len, (UChar*)command, command_len, REPORT_ERRORS, FG(default_context))) {
-                       RETURN_FALSE;
-               }
+       if (php_stream_path_param_encode(ppcommand, &command, &command_len, REPORT_ERRORS, FG(default_context)) == FAILURE) {
+               RETURN_FALSE;
        }
 
        posix_mode = estrndup(mode, mode_len);
@@ -1116,9 +1065,6 @@ PHP_FUNCTION(popen)
        }
 
        efree(posix_mode);
-       if (command_type == IS_UNICODE) {
-               efree(command);
-       }
 }
 /* }}} */
 
@@ -1506,31 +1452,24 @@ PHPAPI int php_mkdir(char *dir, long mode TSRMLS_DC)
    Create a directory */
 PHP_FUNCTION(mkdir)
 {
+       zval **ppdir;
        char *dir;
        int dir_len;
-       zend_uchar dir_type;
        zval *zcontext = NULL;
        long mode = 0777;
        zend_bool recursive = 0;
        php_stream_context *context;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|lbr", &dir, &dir_len, &dir_type, &mode, &recursive, &zcontext) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|lbr", &ppdir, &mode, &recursive, &zcontext) == FAILURE) {
                RETURN_FALSE;
        }
 
        context = php_stream_context_from_zval(zcontext, 0);
-
-       if (dir_type == IS_UNICODE) {
-               if (FAILURE == php_stream_path_encode(NULL, &dir, &dir_len, (UChar*)dir, dir_len, REPORT_ERRORS, context)) {
-                       RETURN_FALSE;
-               }
+       if (php_stream_path_param_encode(ppdir, &dir, &dir_len, REPORT_ERRORS, context) == FAILURE) {
+               RETURN_FALSE;
        }
 
        RETVAL_BOOL(php_stream_mkdir(dir, mode, (recursive ? PHP_STREAM_MKDIR_RECURSIVE : 0) | REPORT_ERRORS, context));
-
-       if (dir_type == IS_UNICODE) {
-               efree(dir);
-       }
 }
 /* }}} */
 
@@ -1538,29 +1477,22 @@ PHP_FUNCTION(mkdir)
    Remove a directory */
 PHP_FUNCTION(rmdir)
 {
+       zval **ppdir;
        char *dir;
        int dir_len;
-       zend_uchar dir_type;
        zval *zcontext = NULL;
        php_stream_context *context;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|r", &dir, &dir_len, &dir_type, &zcontext) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|r", &ppdir, &zcontext) == FAILURE) {
                RETURN_FALSE;
        }
 
        context = php_stream_context_from_zval(zcontext, 0);
-
-       if (dir_type == IS_UNICODE) {
-               if (FAILURE == php_stream_path_encode(NULL, &dir, &dir_len, (UChar*)dir, dir_len, REPORT_ERRORS, context)) {
-                       RETURN_FALSE;
-               }
+       if (php_stream_path_param_encode(ppdir, &dir, &dir_len, REPORT_ERRORS, context) == FAILURE) {
+               RETURN_FALSE;
        }
 
        RETVAL_BOOL(php_stream_rmdir(dir, REPORT_ERRORS, context));
-
-       if (dir_type == IS_UNICODE) {
-               efree(dir);
-       }
 }
 /* }}} */
 
@@ -1568,43 +1500,36 @@ PHP_FUNCTION(rmdir)
    Output a file or a URL */
 PHP_FUNCTION(readfile)
 {
+       zval **ppfilename;
        char *filename;
-       int size = 0;
        int filename_len;
-       zend_uchar filename_type;
+       int size = 0;
        long flags = 0;
        zval *zcontext = NULL;
        php_stream *stream;
        php_stream_context *context = NULL;
        char *mode = "rb";
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|lr!", &filename, &filename_len, &filename_type,
-                                                                                                       &flags, &zcontext) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|lr!", &ppfilename, &flags, &zcontext) == FAILURE) {
                RETURN_FALSE;
        }
 
        context = php_stream_context_from_zval(zcontext, 0);
+       if (php_stream_path_param_encode(ppfilename, &filename, &filename_len, REPORT_ERRORS, context) == FAILURE) {
+               RETURN_FALSE;
+       }
 
        if (flags & PHP_FILE_TEXT) {
                mode = "rt";
        }
 
-       if (filename_type == IS_UNICODE) {
-               if (php_stream_path_encode(NULL, &filename, &filename_len, (UChar*)filename, filename_len, REPORT_ERRORS, context) == FAILURE) {
-                       RETURN_FALSE;
-               }
-       }
-
        stream = php_stream_open_wrapper_ex(filename, mode, ((flags & PHP_FILE_USE_INCLUDE_PATH) ? USE_PATH : 0) | REPORT_ERRORS, NULL, context);
-       if (filename_type == IS_UNICODE) {
-               efree(filename);
-       }
-
        if (stream) {
                size = php_stream_passthru(stream);
                php_stream_close(stream);
                RETURN_LONG(size);
        }
+
        RETURN_FALSE;
 }
 /* }}} */
@@ -1661,61 +1586,42 @@ PHPAPI PHP_FUNCTION(fpassthru)
    Rename a file */
 PHP_FUNCTION(rename)
 {
+       zval **ppold, **ppnew;
        char *old_name, *new_name;
        int old_name_len, new_name_len;
-       zend_uchar old_name_type, new_name_type;
-       zend_uchar free_old_name = 0, free_new_name = 0;
        zval *zcontext = NULL;
        php_stream_wrapper *wrapper;
        php_stream_context *context;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "tt|r", &old_name, &old_name_len, &old_name_type, &new_name, &new_name_len, &new_name_type, &zcontext) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ|r", &ppold, &ppnew, &zcontext) == FAILURE) {
                RETURN_FALSE;
        }
 
        context = php_stream_context_from_zval(zcontext, 0);
-       RETVAL_FALSE;
-
-       if (old_name_type == IS_UNICODE) {
-               if (FAILURE == php_stream_path_encode(NULL, &old_name, &old_name_len, (UChar*)old_name, old_name_len, REPORT_ERRORS, context)) {
-                       goto rename_cleanup;
-               }
-               free_old_name = 1;
+       if (php_stream_path_param_encode(ppold, &old_name, &old_name_len, REPORT_ERRORS, context) == FAILURE ||
+               php_stream_path_param_encode(ppnew, &new_name, &new_name_len, REPORT_ERRORS, context) == FAILURE) {
+               RETURN_FALSE;
        }
 
        wrapper = php_stream_locate_url_wrapper(old_name, NULL, 0 TSRMLS_CC);
 
        if (!wrapper || !wrapper->wops) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to locate stream wrapper");
-               goto rename_cleanup;
+               RETURN_FALSE;
        }
 
        if (!wrapper->wops->rename) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s wrapper does not support renaming", wrapper->wops->label ? wrapper->wops->label : "Source");
-               goto rename_cleanup;
+               RETURN_FALSE;
        }
 
-       if (new_name_type == IS_UNICODE) {
-               if (FAILURE == php_stream_path_encode(NULL, &new_name, &new_name_len, (UChar*)new_name, new_name_len, REPORT_ERRORS, context)) {
-                       goto rename_cleanup;
-               }
-               free_new_name = 1;
-       }
 
        if (wrapper != php_stream_locate_url_wrapper(new_name, NULL, 0 TSRMLS_CC)) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot rename a file across wrapper types");
-               goto rename_cleanup;
+               RETURN_FALSE;
        }
 
        RETVAL_BOOL(wrapper->wops->rename(wrapper, old_name, new_name, 0, context TSRMLS_CC));
-
-rename_cleanup:
-       if (free_old_name) {
-               efree(old_name);
-       }
-       if (free_new_name) {
-               efree(new_name);
-       }
 }
 /* }}} */
 
@@ -1723,48 +1629,35 @@ rename_cleanup:
    Delete a file */
 PHP_FUNCTION(unlink)
 {
+       zval **ppfilename;
        char *filename;
        int filename_len;
-       zend_uchar filename_type;
        php_stream_wrapper *wrapper;
        zval *zcontext = NULL;
        php_stream_context *context = NULL;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|r", &filename, &filename_len, &filename_type,
-                                                                                                       &zcontext) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|r", &ppfilename, &zcontext) == FAILURE) {
                RETURN_FALSE;
        }
 
        context = php_stream_context_from_zval(zcontext, 0);
-
-       if (filename_type == IS_UNICODE) {
-               if (php_stream_path_encode(NULL, &filename, &filename_len, (UChar*)filename, filename_len, REPORT_ERRORS, context) == FAILURE) {
-                       RETURN_FALSE;
-               }
+       if (php_stream_path_param_encode(ppfilename, &filename, &filename_len, REPORT_ERRORS, context) == FAILURE) {
+               RETURN_FALSE;
        }
 
        wrapper = php_stream_locate_url_wrapper(filename, NULL, 0 TSRMLS_CC);
 
        if (!wrapper || !wrapper->wops) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to locate stream wrapper");
-               if (filename_type == IS_UNICODE) {
-                       efree(filename);
-               }
                RETURN_FALSE;
        }
 
        if (!wrapper->wops->unlink) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s does not allow unlinking", wrapper->wops->label ? wrapper->wops->label : "Wrapper");
-               if (filename_type == IS_UNICODE) {
-                       efree(filename);
-               }
                RETURN_FALSE;
        }
 
        RETVAL_BOOL(wrapper->wops->unlink(wrapper, filename, REPORT_ERRORS, context TSRMLS_CC));
-       if (filename_type == IS_UNICODE) {
-               efree(filename);
-       }
 }
 /* }}} */
 
@@ -2519,21 +2412,16 @@ out:
    Return the resolved path */
 PHP_FUNCTION(realpath)
 {
+       zval **ppfilename;
        char *filename;
        int filename_len;
-       zend_uchar filename_type;
        char resolved_path_buff[MAXPATHLEN];
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t", &filename, &filename_len, &filename_type) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &ppfilename) == FAILURE ||
+               php_stream_path_param_encode(ppfilename, &filename, &filename_len, REPORT_ERRORS, FG(default_context)) == FAILURE) {
                return;
        }
 
-       if (filename_type == IS_UNICODE) {
-               if (php_stream_path_encode(&php_plain_files_wrapper, &filename, &filename_len, (UChar*)filename, filename_len, REPORT_ERRORS, FG(default_context)) == FAILURE) {
-                       RETURN_FALSE;
-               }
-       }
-
        if (VCWD_REALPATH(filename, resolved_path_buff)) {
 #ifdef ZTS
                if (VCWD_ACCESS(resolved_path_buff, F_OK)) {
@@ -2556,10 +2444,6 @@ PHP_FUNCTION(realpath)
        } else {
                RETVAL_FALSE;
        }
-
-       if (filename_type == IS_UNICODE) {
-               efree(filename);
-       }
 }
 /* }}} */
 #endif