andrei Wed Jul 12 17:04:14 2006 UTC Modified files: /ZendEngine2 zend.c zend.h zend_vm_def.h zend_vm_execute.h /php-src/main main.c Log: Commit Sara's patch for supporting filesystem enccoding in include/require.
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend.c?r1=1.363&r2=1.364&diff_format=u Index: ZendEngine2/zend.c diff -u ZendEngine2/zend.c:1.363 ZendEngine2/zend.c:1.364 --- ZendEngine2/zend.c:1.363 Wed Jun 28 14:13:13 2006 +++ ZendEngine2/zend.c Wed Jul 12 17:04:12 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.c,v 1.363 2006/06/28 14:13:13 andrei Exp $ */ +/* $Id: zend.c,v 1.364 2006/07/12 17:04:12 andrei Exp $ */ #include "zend.h" #include "zend_extensions.h" @@ -55,6 +55,7 @@ ZEND_API zend_class_entry *zend_standard_class_def = NULL; ZEND_API int (*zend_printf)(const char *format, ...); ZEND_API zend_write_func_t zend_write; +ZEND_API int (*zend_path_encode)(char **encpath, int *encpath_len, const UChar *path, int path_len TSRMLS_DC); ZEND_API FILE *(*zend_fopen)(const char *filename, char **opened_path); ZEND_API int (*zend_stream_open_function)(const char *filename, zend_file_handle *handle TSRMLS_DC); ZEND_API void (*zend_block_interruptions)(void); @@ -607,6 +608,21 @@ } } +static int zend_path_encode_wrapper(char **encpath, int *encpath_len, const UChar *path, int path_len TSRMLS_DC) +{ + UErrorCode status = U_ZERO_ERROR; + + zend_convert_from_unicode(ZEND_U_CONVERTER(UG(filesystem_encoding_conv)), encpath, encpath_len, path, path_len, &status); + + if (U_FAILURE(status)) { + efree(*encpath); + *encpath = NULL; + *encpath_len = 0; + return FAILURE; + } + + return SUCCESS; +} static FILE *zend_fopen_wrapper(const char *filename, char **opened_path) { @@ -990,6 +1006,10 @@ zend_error_cb = utility_functions->error_function; zend_printf = utility_functions->printf_function; zend_write = (zend_write_func_t) utility_functions->write_function; + zend_path_encode = utility_functions->path_encode_function; + if (!zend_path_encode) { + zend_path_encode = zend_path_encode_wrapper; + } zend_fopen = utility_functions->fopen_function; if (!zend_fopen) { zend_fopen = zend_fopen_wrapper; http://cvs.php.net/viewvc.cgi/ZendEngine2/zend.h?r1=1.323&r2=1.324&diff_format=u Index: ZendEngine2/zend.h diff -u ZendEngine2/zend.h:1.323 ZendEngine2/zend.h:1.324 --- ZendEngine2/zend.h:1.323 Mon Jun 12 17:06:39 2006 +++ ZendEngine2/zend.h Wed Jul 12 17:04:13 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.h,v 1.323 2006/06/12 17:06:39 andrei Exp $ */ +/* $Id: zend.h,v 1.324 2006/07/12 17:04:13 andrei Exp $ */ #ifndef ZEND_H #define ZEND_H @@ -410,6 +410,7 @@ void (*error_function)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args); int (*printf_function)(const char *format, ...); int (*write_function)(const char *str, uint str_length); + int (*path_encode_function)(char **encpath, int *encpath_len, const UChar *path, int path_len TSRMLS_DC); FILE *(*fopen_function)(const char *filename, char **opened_path); void (*message_handler)(long message, void *data); void (*block_interruptions)(void); @@ -555,6 +556,7 @@ BEGIN_EXTERN_C() extern ZEND_API int (*zend_printf)(const char *format, ...); extern ZEND_API zend_write_func_t zend_write; +extern ZEND_API int (*zend_path_encode)(char **encpath, int *encpath_len, const UChar *path, int path_len TSRMLS_DC); extern ZEND_API FILE *(*zend_fopen)(const char *filename, char **opened_path); extern ZEND_API void (*zend_block_interruptions)(void); extern ZEND_API void (*zend_unblock_interruptions)(void); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.122&r2=1.123&diff_format=u Index: ZendEngine2/zend_vm_def.h diff -u ZendEngine2/zend_vm_def.h:1.122 ZendEngine2/zend_vm_def.h:1.123 --- ZendEngine2/zend_vm_def.h:1.122 Tue Jul 11 08:52:44 2006 +++ ZendEngine2/zend_vm_def.h Wed Jul 12 17:04:13 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_vm_def.h,v 1.122 2006/07/11 08:52:44 dmitry Exp $ */ +/* $Id: zend_vm_def.h,v 1.123 2006/07/12 17:04:13 andrei Exp $ */ /* If you change this file, please regenerate the zend_vm_execute.h and * zend_vm_opcodes.h files by running: @@ -2761,7 +2761,19 @@ convert_to_unicode(&tmp_inc_filename); inc_filename = &tmp_inc_filename; } - } else if (Z_TYPE_P(inc_filename)!=IS_STRING) { + } else if (Z_TYPE_P(inc_filename) == IS_UNICODE) { + char *encpath; + int encpath_len; + + if (FAILURE == zend_path_encode(&encpath, &encpath_len, Z_USTRVAL_P(inc_filename), Z_USTRLEN_P(inc_filename) TSRMLS_CC)) { + failure_retval = 0; + zend_error(E_ERROR, "Failure converting '%R' to filesystem encoding", IS_UNICODE, Z_USTRVAL_P(inc_filename)); + goto skip_compile; + } + + ZVAL_STRINGL(&tmp_inc_filename, encpath, encpath_len, 0); + inc_filename = &tmp_inc_filename; + } else if (Z_TYPE_P(inc_filename) != IS_STRING) { tmp_inc_filename = *inc_filename; zval_copy_ctor(&tmp_inc_filename); convert_to_string(&tmp_inc_filename); @@ -2824,6 +2836,8 @@ break; EMPTY_SWITCH_DEFAULT_CASE() } + +skip_compile: if (inc_filename==&tmp_inc_filename) { zval_dtor(&tmp_inc_filename); } http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.126&r2=1.127&diff_format=u Index: ZendEngine2/zend_vm_execute.h diff -u ZendEngine2/zend_vm_execute.h:1.126 ZendEngine2/zend_vm_execute.h:1.127 --- ZendEngine2/zend_vm_execute.h:1.126 Tue Jul 11 08:52:44 2006 +++ ZendEngine2/zend_vm_execute.h Wed Jul 12 17:04:13 2006 @@ -1870,7 +1870,19 @@ convert_to_unicode(&tmp_inc_filename); inc_filename = &tmp_inc_filename; } - } else if (Z_TYPE_P(inc_filename)!=IS_STRING) { + } else if (Z_TYPE_P(inc_filename) == IS_UNICODE) { + char *encpath; + int encpath_len; + + if (FAILURE == zend_path_encode(&encpath, &encpath_len, Z_USTRVAL_P(inc_filename), Z_USTRLEN_P(inc_filename) TSRMLS_CC)) { + failure_retval = 0; + zend_error(E_ERROR, "Failure converting '%R' to filesystem encoding", IS_UNICODE, Z_USTRVAL_P(inc_filename)); + goto skip_compile; + } + + ZVAL_STRINGL(&tmp_inc_filename, encpath, encpath_len, 0); + inc_filename = &tmp_inc_filename; + } else if (Z_TYPE_P(inc_filename) != IS_STRING) { tmp_inc_filename = *inc_filename; zval_copy_ctor(&tmp_inc_filename); convert_to_string(&tmp_inc_filename); @@ -1933,6 +1945,8 @@ break; EMPTY_SWITCH_DEFAULT_CASE() } + +skip_compile: if (inc_filename==&tmp_inc_filename) { zval_dtor(&tmp_inc_filename); } @@ -4436,7 +4450,19 @@ convert_to_unicode(&tmp_inc_filename); inc_filename = &tmp_inc_filename; } - } else if (Z_TYPE_P(inc_filename)!=IS_STRING) { + } else if (Z_TYPE_P(inc_filename) == IS_UNICODE) { + char *encpath; + int encpath_len; + + if (FAILURE == zend_path_encode(&encpath, &encpath_len, Z_USTRVAL_P(inc_filename), Z_USTRLEN_P(inc_filename) TSRMLS_CC)) { + failure_retval = 0; + zend_error(E_ERROR, "Failure converting '%R' to filesystem encoding", IS_UNICODE, Z_USTRVAL_P(inc_filename)); + goto skip_compile; + } + + ZVAL_STRINGL(&tmp_inc_filename, encpath, encpath_len, 0); + inc_filename = &tmp_inc_filename; + } else if (Z_TYPE_P(inc_filename) != IS_STRING) { tmp_inc_filename = *inc_filename; zval_copy_ctor(&tmp_inc_filename); convert_to_string(&tmp_inc_filename); @@ -4499,6 +4525,8 @@ break; EMPTY_SWITCH_DEFAULT_CASE() } + +skip_compile: if (inc_filename==&tmp_inc_filename) { zval_dtor(&tmp_inc_filename); } @@ -7599,7 +7627,19 @@ convert_to_unicode(&tmp_inc_filename); inc_filename = &tmp_inc_filename; } - } else if (Z_TYPE_P(inc_filename)!=IS_STRING) { + } else if (Z_TYPE_P(inc_filename) == IS_UNICODE) { + char *encpath; + int encpath_len; + + if (FAILURE == zend_path_encode(&encpath, &encpath_len, Z_USTRVAL_P(inc_filename), Z_USTRLEN_P(inc_filename) TSRMLS_CC)) { + failure_retval = 0; + zend_error(E_ERROR, "Failure converting '%R' to filesystem encoding", IS_UNICODE, Z_USTRVAL_P(inc_filename)); + goto skip_compile; + } + + ZVAL_STRINGL(&tmp_inc_filename, encpath, encpath_len, 0); + inc_filename = &tmp_inc_filename; + } else if (Z_TYPE_P(inc_filename) != IS_STRING) { tmp_inc_filename = *inc_filename; zval_copy_ctor(&tmp_inc_filename); convert_to_string(&tmp_inc_filename); @@ -7662,6 +7702,8 @@ break; EMPTY_SWITCH_DEFAULT_CASE() } + +skip_compile: if (inc_filename==&tmp_inc_filename) { zval_dtor(&tmp_inc_filename); } @@ -20358,7 +20400,19 @@ convert_to_unicode(&tmp_inc_filename); inc_filename = &tmp_inc_filename; } - } else if (Z_TYPE_P(inc_filename)!=IS_STRING) { + } else if (Z_TYPE_P(inc_filename) == IS_UNICODE) { + char *encpath; + int encpath_len; + + if (FAILURE == zend_path_encode(&encpath, &encpath_len, Z_USTRVAL_P(inc_filename), Z_USTRLEN_P(inc_filename) TSRMLS_CC)) { + failure_retval = 0; + zend_error(E_ERROR, "Failure converting '%R' to filesystem encoding", IS_UNICODE, Z_USTRVAL_P(inc_filename)); + goto skip_compile; + } + + ZVAL_STRINGL(&tmp_inc_filename, encpath, encpath_len, 0); + inc_filename = &tmp_inc_filename; + } else if (Z_TYPE_P(inc_filename) != IS_STRING) { tmp_inc_filename = *inc_filename; zval_copy_ctor(&tmp_inc_filename); convert_to_string(&tmp_inc_filename); @@ -20421,6 +20475,8 @@ break; EMPTY_SWITCH_DEFAULT_CASE() } + +skip_compile: if (inc_filename==&tmp_inc_filename) { zval_dtor(&tmp_inc_filename); } http://cvs.php.net/viewvc.cgi/php-src/main/main.c?r1=1.694&r2=1.695&diff_format=u Index: php-src/main/main.c diff -u php-src/main/main.c:1.694 php-src/main/main.c:1.695 --- php-src/main/main.c:1.694 Sat Jun 3 11:19:44 2006 +++ php-src/main/main.c Wed Jul 12 17:04:13 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: main.c,v 1.694 2006/06/03 11:19:44 mike Exp $ */ +/* $Id: main.c,v 1.695 2006/07/12 17:04:13 andrei Exp $ */ /* {{{ includes */ @@ -974,6 +974,14 @@ } /* }}} */ +/* {{{ php_path_encode_for_zend + */ +static int php_path_encode_for_zend(char **encpath, int *encpath_len, const UChar *path, int path_len TSRMLS_DC) +{ + return php_stream_path_encode(NULL, encpath, encpath_len, path, path_len, 0, NULL); +} +/* }}} */ + /* {{{ php_fopen_wrapper_for_zend */ static FILE *php_fopen_wrapper_for_zend(const char *filename, char **opened_path) @@ -1522,6 +1530,7 @@ zuf.error_function = php_error_cb; zuf.printf_function = php_printf; zuf.write_function = php_output_wrapper; + zuf.path_encode_function = php_path_encode_for_zend; zuf.fopen_function = php_fopen_wrapper_for_zend; zuf.message_handler = php_message_handler_for_zend; zuf.block_interruptions = sapi_module.block_interruptions;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php