mirror of
https://github.com/php/php-src.git
synced 2025-01-24 04:33:39 +08:00
Avoid temporary string creation and destruction.
This commit is contained in:
parent
9f1e970058
commit
dc47171523
@ -496,6 +496,19 @@ ZEND_API char *zend_ini_string(char *name, size_t name_length, int orig) /* {{{
|
|||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
ZEND_API zend_string *zend_ini_get_value(zend_string *name) /* {{{ */
|
||||||
|
{
|
||||||
|
zend_ini_entry *ini_entry;
|
||||||
|
|
||||||
|
ini_entry = zend_hash_find_ptr(EG(ini_directives), name);
|
||||||
|
if (ini_entry) {
|
||||||
|
return ini_entry->value ? ini_entry->value : ZSTR_EMPTY_ALLOC();
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* }}} */
|
||||||
|
|
||||||
#if TONY_20070307
|
#if TONY_20070307
|
||||||
static void zend_ini_displayer_cb(zend_ini_entry *ini_entry, int type) /* {{{ */
|
static void zend_ini_displayer_cb(zend_ini_entry *ini_entry, int type) /* {{{ */
|
||||||
{
|
{
|
||||||
|
@ -87,6 +87,7 @@ ZEND_API zend_long zend_ini_long(char *name, size_t name_length, int orig);
|
|||||||
ZEND_API double zend_ini_double(char *name, size_t name_length, int orig);
|
ZEND_API double zend_ini_double(char *name, size_t name_length, int orig);
|
||||||
ZEND_API char *zend_ini_string(char *name, size_t name_length, int orig);
|
ZEND_API char *zend_ini_string(char *name, size_t name_length, int orig);
|
||||||
ZEND_API char *zend_ini_string_ex(char *name, size_t name_length, int orig, zend_bool *exists);
|
ZEND_API char *zend_ini_string_ex(char *name, size_t name_length, int orig, zend_bool *exists);
|
||||||
|
ZEND_API zend_string *zend_ini_get_value(zend_string *name);
|
||||||
|
|
||||||
ZEND_API int zend_ini_register_displayer(char *name, uint32_t name_length, void (*displayer)(zend_ini_entry *ini_entry, int type));
|
ZEND_API int zend_ini_register_displayer(char *name, uint32_t name_length, void (*displayer)(zend_ini_entry *ini_entry, int type));
|
||||||
|
|
||||||
|
@ -5352,26 +5352,29 @@ PHP_FUNCTION(highlight_string)
|
|||||||
Get a configuration option */
|
Get a configuration option */
|
||||||
PHP_FUNCTION(ini_get)
|
PHP_FUNCTION(ini_get)
|
||||||
{
|
{
|
||||||
char *varname, *str;
|
zend_string *varname, *val;
|
||||||
size_t varname_len, len;
|
|
||||||
|
|
||||||
ZEND_PARSE_PARAMETERS_START(1, 1)
|
ZEND_PARSE_PARAMETERS_START(1, 1)
|
||||||
Z_PARAM_STRING(varname, varname_len)
|
Z_PARAM_STR(varname)
|
||||||
ZEND_PARSE_PARAMETERS_END();
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
|
|
||||||
str = zend_ini_string(varname, (uint32_t)varname_len, 0);
|
val = zend_ini_get_value(varname);
|
||||||
|
|
||||||
if (!str) {
|
if (!val) {
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = strlen(str);
|
if (ZSTR_IS_INTERNED(val)) {
|
||||||
if (len == 0) {
|
RETVAL_INTERNED_STR(val);
|
||||||
RETURN_EMPTY_STRING();
|
} else if (ZSTR_LEN(val) == 0) {
|
||||||
} else if (len == 1) {
|
RETVAL_EMPTY_STRING();
|
||||||
RETURN_INTERNED_STR(ZSTR_CHAR((zend_uchar)str[0]));
|
} else if (ZSTR_LEN(val) == 1) {
|
||||||
|
RETVAL_INTERNED_STR(ZSTR_CHAR((zend_uchar)ZSTR_VAL(val)[0]));
|
||||||
|
} else if (!(GC_FLAGS(val) & GC_PERSISTENT)) {
|
||||||
|
ZVAL_NEW_STR(return_value, zend_string_copy(val));
|
||||||
|
} else {
|
||||||
|
ZVAL_NEW_STR(return_value, zend_string_init(ZSTR_VAL(val), ZSTR_LEN(val), 0));
|
||||||
}
|
}
|
||||||
RETURN_STRINGL(str, len);
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -5471,25 +5474,27 @@ PHP_FUNCTION(ini_set)
|
|||||||
{
|
{
|
||||||
zend_string *varname;
|
zend_string *varname;
|
||||||
zend_string *new_value;
|
zend_string *new_value;
|
||||||
char *old_value;
|
zend_string *val;
|
||||||
|
|
||||||
ZEND_PARSE_PARAMETERS_START(2, 2)
|
ZEND_PARSE_PARAMETERS_START(2, 2)
|
||||||
Z_PARAM_STR(varname)
|
Z_PARAM_STR(varname)
|
||||||
Z_PARAM_STR(new_value)
|
Z_PARAM_STR(new_value)
|
||||||
ZEND_PARSE_PARAMETERS_END();
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
|
|
||||||
old_value = zend_ini_string(ZSTR_VAL(varname), ZSTR_LEN(varname), 0);
|
val = zend_ini_get_value(varname);
|
||||||
|
|
||||||
/* copy to return here, because alter might free it! */
|
/* copy to return here, because alter might free it! */
|
||||||
if (old_value) {
|
if (val) {
|
||||||
size_t len = strlen(old_value);
|
if (ZSTR_IS_INTERNED(val)) {
|
||||||
|
RETVAL_INTERNED_STR(val);
|
||||||
if (len == 0) {
|
} else if (ZSTR_LEN(val) == 0) {
|
||||||
RETVAL_EMPTY_STRING();
|
RETVAL_EMPTY_STRING();
|
||||||
} else if (len == 1) {
|
} else if (ZSTR_LEN(val) == 1) {
|
||||||
RETVAL_INTERNED_STR(ZSTR_CHAR((zend_uchar)old_value[0]));
|
RETVAL_INTERNED_STR(ZSTR_CHAR((zend_uchar)ZSTR_VAL(val)[0]));
|
||||||
|
} else if (!(GC_FLAGS(val) & GC_PERSISTENT)) {
|
||||||
|
ZVAL_NEW_STR(return_value, zend_string_copy(val));
|
||||||
} else {
|
} else {
|
||||||
RETVAL_STRINGL(old_value, len);
|
ZVAL_NEW_STR(return_value, zend_string_init(ZSTR_VAL(val), ZSTR_LEN(val), 0));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
RETVAL_FALSE;
|
RETVAL_FALSE;
|
||||||
|
Loading…
Reference in New Issue
Block a user