Apply new path encoding style to the rest of e/s/file.c

This layout is definately simpler to maintain
and every bit as functional as the other version.
This commit is contained in:
Sara Golemon 2006-10-02 03:13:47 +00:00
parent d2ff6db191
commit a4b9e3719b

View 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 (php_stream_path_param_encode(ppfilename, &filename, &filename_len, REPORT_ERRORS, context) == FAILURE) {
RETURN_FALSE;
}
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, 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