]> granicus.if.org Git - php/commitdiff
MFH: - Fixed the rest of bug #41561 ( @ operator not working )
authorJani Taskinen <jani@php.net>
Fri, 7 Sep 2007 09:37:38 +0000 (09:37 +0000)
committerJani Taskinen <jani@php.net>
Fri, 7 Sep 2007 09:37:38 +0000 (09:37 +0000)
Zend/zend_ini.c
Zend/zend_ini.h
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index e8a38538ddff6e0b6b7cd2924484d16beefe3947..32377760263223e29c1ddbb3c36b0405094bd8b3 100644 (file)
@@ -234,7 +234,7 @@ ZEND_API void zend_ini_refresh_caches(int stage TSRMLS_DC) /* {{{ */
 /* }}} */
 #endif
 
-ZEND_API int zend_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage) /* {{{ */
+ZEND_API int zend_alter_ini_entry_ex(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage, int force_change) /* {{{ */
 {
        zend_ini_entry *ini_entry;
        char *duplicate;
@@ -249,8 +249,10 @@ ZEND_API int zend_alter_ini_entry(char *name, uint name_length, char *new_value,
                ini_entry->modifiable = ZEND_INI_SYSTEM;
        }
 
-       if (!(ini_entry->modifiable & modify_type)) {
-               return FAILURE;
+       if (!force_change) {
+               if (!(ini_entry->modifiable & modify_type)) {
+                       return FAILURE;
+               }
        }
 
        modified = ini_entry->modified;
index 11c2594bb31781b1c802e9e05dcb9dcef7a18ff6..e1007bf1a93e1aaaa09579a0b1cd7181bc24e82b 100644 (file)
@@ -95,7 +95,7 @@ ZEND_API void zend_ini_sort_entries(TSRMLS_D);
 ZEND_API int zend_register_ini_entries(zend_ini_entry *ini_entry, int module_number TSRMLS_DC);
 ZEND_API void zend_unregister_ini_entries(int module_number TSRMLS_DC);
 ZEND_API void zend_ini_refresh_caches(int stage TSRMLS_DC);
-ZEND_API int zend_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage);
+ZEND_API int zend_alter_ini_entry_ex(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage, int force_change);
 ZEND_API int zend_restore_ini_entry(char *name, uint name_length, int stage);
 ZEND_API void display_ini_entries(zend_module_entry *module);
 
@@ -105,6 +105,9 @@ ZEND_API char *zend_ini_string(char *name, uint name_length, int orig);
 
 ZEND_API int zend_ini_register_displayer(char *name, uint name_length, void (*displayer)(zend_ini_entry *ini_entry, int type));
 
+#define zend_alter_ini_entry(name, name_length, new_value, new_value_length, modify_type, stage) \
+       zend_alter_ini_entry_ex(name, name_length, new_value, new_value_length, modify_type, stage, 0)
+
 ZEND_API ZEND_INI_DISP(zend_ini_boolean_displayer_cb);
 ZEND_API ZEND_INI_DISP(zend_ini_color_displayer_cb);
 ZEND_API ZEND_INI_DISP(display_link_numbers);
index e5fb3fb386b3496f0861443ea2d2e427125b7e68..7b967e7c00c1346115a30f7df3af931109deaaad 100644 (file)
@@ -3599,7 +3599,7 @@ ZEND_VM_HANDLER(57, ZEND_BEGIN_SILENCE, ANY, ANY)
        }
 
        if (EG(error_reporting)) {
-               zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), "0", 1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
+               zend_alter_ini_entry_ex("error_reporting", sizeof("error_reporting"), "0", 1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME, 1);
        }
        ZEND_VM_NEXT_OPCODE();
 }
@@ -3619,7 +3619,7 @@ ZEND_VM_HANDLER(58, ZEND_END_SILENCE, TMP, ANY)
                Z_TYPE(restored_error_reporting) = IS_LONG;
                Z_LVAL(restored_error_reporting) = Z_LVAL(EX_T(opline->op1.u.var).tmp_var);
                convert_to_string(&restored_error_reporting);
-               zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
+               zend_alter_ini_entry_ex("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME, 1);
                zendi_zval_dtor(restored_error_reporting);
        }
        if (EX(old_error_reporting) == &EX_T(opline->op1.u.var).tmp_var) {
@@ -3811,7 +3811,7 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
                Z_TYPE(restored_error_reporting) = IS_LONG;
                Z_LVAL(restored_error_reporting) = Z_LVAL_P(EX(old_error_reporting));
                convert_to_string(&restored_error_reporting);
-               zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
+               zend_alter_ini_entry_ex("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME, 1);
                zendi_zval_dtor(restored_error_reporting);
        }
        EX(old_error_reporting) = NULL;
index 51e18469eaef5568db4da5a5ecf27d228530660b..ad01be669dc7002b45a9373834ab887b3f2692c5 100644 (file)
@@ -442,7 +442,7 @@ static int ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        }
 
        if (EG(error_reporting)) {
-               zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), "0", 1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
+               zend_alter_ini_entry_ex("error_reporting", sizeof("error_reporting"), "0", 1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME, 1);
        }
        ZEND_VM_NEXT_OPCODE();
 }
@@ -592,7 +592,7 @@ static int ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                Z_TYPE(restored_error_reporting) = IS_LONG;
                Z_LVAL(restored_error_reporting) = Z_LVAL_P(EX(old_error_reporting));
                convert_to_string(&restored_error_reporting);
-               zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
+               zend_alter_ini_entry_ex("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME, 1);
                zendi_zval_dtor(restored_error_reporting);
        }
        EX(old_error_reporting) = NULL;
@@ -4922,7 +4922,7 @@ static int ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                Z_TYPE(restored_error_reporting) = IS_LONG;
                Z_LVAL(restored_error_reporting) = Z_LVAL(EX_T(opline->op1.u.var).tmp_var);
                convert_to_string(&restored_error_reporting);
-               zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
+               zend_alter_ini_entry_ex("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME, 1);
                zendi_zval_dtor(restored_error_reporting);
        }
        if (EX(old_error_reporting) == &EX_T(opline->op1.u.var).tmp_var) {