diff options
author | Scott MacVicar <scottmac@php.net> | 2008-07-07 21:37:46 +0000 |
---|---|---|
committer | Scott MacVicar <scottmac@php.net> | 2008-07-07 21:37:46 +0000 |
commit | 43e7784b0a11ad3cbe169cca494cdee98f65c84e (patch) | |
tree | a7a18856ea6d2c6ba748a9b6c7344fc163bc3020 | |
parent | 5c158c03ec5b31aa9a24d7e9870da2dba5b00592 (diff) | |
download | php-git-43e7784b0a11ad3cbe169cca494cdee98f65c84e.tar.gz |
Add zend_ini_string_ex so that the you can differentiate between NULL as a value and its absence, this is important for ini_get. Related to bug #42657 and #43348
-rw-r--r-- | Zend/zend_ini.c | 28 | ||||
-rw-r--r-- | Zend/zend_ini.h | 3 |
2 files changed, 26 insertions, 5 deletions
diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c index c773f0a05b..0e82a20b71 100644 --- a/Zend/zend_ini.c +++ b/Zend/zend_ini.c @@ -367,18 +367,23 @@ ZEND_API double zend_ini_double(char *name, uint name_length, int orig) /* {{{ * } /* }}} */ -ZEND_API char *zend_ini_string(char *name, uint name_length, int orig) /* {{{ */ +ZEND_API char *zend_ini_string_ex(char *name, uint name_length, int orig, zend_bool *exists) /* {{{ */ { zend_ini_entry *ini_entry; TSRMLS_FETCH(); if (zend_hash_find(EG(ini_directives), name, name_length, (void **) &ini_entry) == SUCCESS) { + if (exists) { + *exists = 1; + } + if (orig && ini_entry->modified) { - return ini_entry->orig_value ? ini_entry->orig_value : ""; + return ini_entry->orig_value; } else { - return ini_entry->value ? ini_entry->value : ""; + return ini_entry->value; } - } else { + } else if (exists) { + *exists = 0; return NULL; } @@ -386,6 +391,21 @@ ZEND_API char *zend_ini_string(char *name, uint name_length, int orig) /* {{{ */ } /* }}} */ +ZEND_API char *zend_ini_string(char *name, uint name_length, int orig) /* {{{ */ +{ + zend_bool exists = 1; + char *return_value; + + return_value = zend_ini_string_ex(name, name_length, orig, &exists); + if (!exists) { + return NULL; + } else if (!return_value) { + return_value = ""; + } + return return_value; +} +/* }}} */ + #if TONY_20070307 static void zend_ini_displayer_cb(zend_ini_entry *ini_entry, int type) /* {{{ */ { diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h index 1f58dbb064..fd7cf31ceb 100644 --- a/Zend/zend_ini.h +++ b/Zend/zend_ini.h @@ -104,6 +104,7 @@ ZEND_API void display_ini_entries(zend_module_entry *module); ZEND_API long zend_ini_long(char *name, uint name_length, int orig); ZEND_API double zend_ini_double(char *name, uint name_length, int orig); ZEND_API char *zend_ini_string(char *name, uint name_length, int orig); +ZEND_API char *zend_ini_string_ex(char *name, uint name_length, int orig, zend_bool *exists); ZEND_API int zend_ini_register_displayer(char *name, uint name_length, void (*displayer)(zend_ini_entry *ini_entry, int type)); @@ -157,7 +158,7 @@ END_EXTERN_C() #define INI_INT(name) zend_ini_long((name), sizeof(name), 0) #define INI_FLT(name) zend_ini_double((name), sizeof(name), 0) -#define INI_STR(name) zend_ini_string((name), sizeof(name), 0) +#define INI_STR(name) zend_ini_string_ex((name), sizeof(name), 0, NULL) #define INI_BOOL(name) ((zend_bool) INI_INT(name)) #define INI_ORIG_INT(name) zend_ini_long((name), sizeof(name), 1) |