From: Scott MacVicar Date: Mon, 7 Jul 2008 21:47:30 +0000 (+0000) Subject: Add zend_ini_string_ex so that the you can differentiate between NULL as a value... X-Git-Tag: BEFORE_HEAD_NS_CHANGE~1352 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e81f69708ac9add84146cc7d2bbf31c5c5295724;p=php 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 --- diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c index 82cecc4eaf..18a360d190 100644 --- a/Zend/zend_ini.c +++ b/Zend/zend_ini.c @@ -368,22 +368,42 @@ 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 { + if (exists) { + *exists = 0; + } return NULL; } +} +/* }}} */ - return ""; +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; } /* }}} */ diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h index 7274d029ea..1b777a00c1 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)