diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2007-01-08 03:39:09 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2007-01-08 03:39:09 +0000 |
commit | c5fb061cbfd4f97f2475801cbcd8b0f59898327b (patch) | |
tree | 92f0a7781c38ef5239cee15a92477d35f4762054 | |
parent | fec9895fc3491b3c3cf1950f4fa3f5c58d78e350 (diff) | |
download | php-git-c5fb061cbfd4f97f2475801cbcd8b0f59898327b.tar.gz |
Provide means for opening file for zend with error supression. Allows us to
avoid INI hackery such as the one used in SPL.
-rwxr-xr-x | ext/spl/php_spl.c | 17 | ||||
-rw-r--r-- | main/main.c | 8 | ||||
-rw-r--r-- | main/php_main.h | 1 |
3 files changed, 10 insertions, 16 deletions
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 01395e8d4f..7029139c67 100755 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -24,6 +24,7 @@ #include "php.h" #include "php_ini.h" +#include "php_main.h" #include "ext/standard/info.h" #include "php_spl.h" #include "spl_functions.h" @@ -207,7 +208,7 @@ PHP_FUNCTION(spl_classes) } /* }}} */ -int spl_autoload(const char *class_name, const char * lc_name, int class_name_len, const char * file_extension TSRMLS_DC) /* {{{ */ +static int spl_autoload(const char *class_name, const char * lc_name, int class_name_len, const char * file_extension TSRMLS_DC) /* {{{ */ { char *class_file; int class_file_len; @@ -215,23 +216,11 @@ int spl_autoload(const char *class_name, const char * lc_name, int class_name_le zend_file_handle file_handle; zend_op_array *new_op_array; zval *result = NULL; - zval err_mode; int ret; class_file_len = spprintf(&class_file, 0, "%s%s", lc_name, file_extension); - ZVAL_LONG(&err_mode, EG(error_reporting)); - if (Z_LVAL(err_mode)) { - php_alter_ini_entry("error_reporting", sizeof("error_reporting"), "0", 1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME); - } - - ret = zend_stream_open(class_file, &file_handle TSRMLS_CC); - - if (!EG(error_reporting) && Z_LVAL(err_mode) != EG(error_reporting)) { - convert_to_string(&err_mode); - zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(err_mode), Z_STRLEN(err_mode), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME); - zendi_zval_dtor(err_mode); - } + ret = php_stream_open_for_zend_ex(class_file, &file_handle, ENFORCE_SAFE_MODE|USE_PATH|STREAM_OPEN_FOR_INCLUDE TSRMLS_CC); if (ret == SUCCESS) { if (!file_handle.opened_path) { diff --git a/main/main.c b/main/main.c index cab5bb4d9a..9e6794b718 100644 --- a/main/main.c +++ b/main/main.c @@ -904,9 +904,14 @@ static long stream_fteller_for_zend(void *handle TSRMLS_DC) static int php_stream_open_for_zend(const char *filename, zend_file_handle *handle TSRMLS_DC) { + return php_stream_open_for_zend_ex(filename, handle, ENFORCE_SAFE_MODE|USE_PATH|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE TSRMLS_CC); +} + +PHPAPI int php_stream_open_for_zend_ex(const char *filename, zend_file_handle *handle, int mode TSRMLS_DC) +{ php_stream *stream; - stream = php_stream_open_wrapper((char *)filename, "rb", ENFORCE_SAFE_MODE|USE_PATH|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, &handle->opened_path); + stream = php_stream_open_wrapper((char *)filename, "rb", mode, &handle->opened_path); if (stream) { handle->type = ZEND_HANDLE_STREAM; @@ -925,7 +930,6 @@ static int php_stream_open_for_zend(const char *filename, zend_file_handle *hand return FAILURE; } - /* {{{ php_get_configuration_directive_for_zend */ static int php_get_configuration_directive_for_zend(char *name, uint name_length, zval *contents) diff --git a/main/php_main.h b/main/php_main.h index 8ec823f66d..01a1bce420 100644 --- a/main/php_main.h +++ b/main/php_main.h @@ -47,6 +47,7 @@ PHPAPI void php_handle_aborted_connection(void); PHPAPI int php_handle_auth_data(const char *auth TSRMLS_DC); PHPAPI void php_html_puts(const char *str, uint siz TSRMLS_DC); +PHPAPI int php_stream_open_for_zend_ex(const char *filename, zend_file_handle *handle, int mode TSRMLS_DC); extern void php_call_shutdown_functions(TSRMLS_D); extern void php_free_shutdown_functions(TSRMLS_D); |