@@ -1340,25 +1340,32 @@ PHP_FUNCTION(get_current_user)
1340
1340
}
1341
1341
/* }}} */
1342
1342
1343
+ #define ZVAL_SET_INI_STR (zv , val ) do { \
1344
+ if (ZSTR_IS_INTERNED(val)) { \
1345
+ ZVAL_INTERNED_STR(zv, val); \
1346
+ } else if (ZSTR_LEN(val) == 0) { \
1347
+ ZVAL_EMPTY_STRING(zv); \
1348
+ } else if (ZSTR_LEN(val) == 1) { \
1349
+ ZVAL_CHAR(zv, ZSTR_VAL(val)[0]); \
1350
+ } else if (!(GC_FLAGS(val) & GC_PERSISTENT)) { \
1351
+ ZVAL_NEW_STR(zv, zend_string_copy(val)); \
1352
+ } else { \
1353
+ ZVAL_NEW_STR(zv, zend_string_init(ZSTR_VAL(val), ZSTR_LEN(val), 0)); \
1354
+ } \
1355
+ } while (0)
1356
+
1343
1357
static void add_config_entries (HashTable * hash , zval * return_value );
1344
1358
1345
1359
/* {{{ add_config_entry */
1346
1360
static void add_config_entry (zend_ulong h , zend_string * key , zval * entry , zval * retval )
1347
1361
{
1348
1362
if (Z_TYPE_P (entry ) == IS_STRING ) {
1349
- zend_string * str = Z_STR_P (entry );
1350
- if (!ZSTR_IS_INTERNED (str )) {
1351
- if (!(GC_FLAGS (str ) & GC_PERSISTENT )) {
1352
- zend_string_addref (str );
1353
- } else {
1354
- str = zend_string_init (ZSTR_VAL (str ), ZSTR_LEN (str ), 0 );
1355
- }
1356
- }
1357
-
1363
+ zval str_zv ;
1364
+ ZVAL_SET_INI_STR (& str_zv , Z_STR_P (entry ));
1358
1365
if (key ) {
1359
- add_assoc_str_ex (retval , ZSTR_VAL (key ), ZSTR_LEN (key ), str );
1366
+ add_assoc_zval_ex (retval , ZSTR_VAL (key ), ZSTR_LEN (key ), & str_zv );
1360
1367
} else {
1361
- add_index_str (retval , h , str );
1368
+ add_index_zval (retval , h , & str_zv );
1362
1369
}
1363
1370
} else if (Z_TYPE_P (entry ) == IS_ARRAY ) {
1364
1371
zval tmp ;
@@ -1385,23 +1392,21 @@ static void add_config_entries(HashTable *hash, zval *return_value) /* {{{ */
1385
1392
/* {{{ Get the value of a PHP configuration option */
1386
1393
PHP_FUNCTION (get_cfg_var )
1387
1394
{
1388
- char * varname ;
1389
- size_t varname_len ;
1390
- zval * retval ;
1395
+ zend_string * varname ;
1391
1396
1392
1397
ZEND_PARSE_PARAMETERS_START (1 , 1 )
1393
- Z_PARAM_STRING (varname , varname_len )
1398
+ Z_PARAM_STR (varname )
1394
1399
ZEND_PARSE_PARAMETERS_END ();
1395
1400
1396
- retval = cfg_get_entry (varname , ( uint32_t ) varname_len );
1401
+ zval * retval = cfg_get_entry_ex (varname );
1397
1402
1398
1403
if (retval ) {
1399
1404
if (Z_TYPE_P (retval ) == IS_ARRAY ) {
1400
1405
array_init (return_value );
1401
1406
add_config_entries (Z_ARRVAL_P (retval ), return_value );
1402
1407
return ;
1403
1408
} else {
1404
- RETURN_STRING ( Z_STRVAL_P (retval ));
1409
+ ZVAL_SET_INI_STR ( return_value , Z_STR_P (retval ));
1405
1410
}
1406
1411
} else {
1407
1412
RETURN_FALSE ;
@@ -1947,21 +1952,6 @@ PHP_FUNCTION(highlight_string)
1947
1952
}
1948
1953
/* }}} */
1949
1954
1950
- #define INI_RETVAL_STR (val ) do { \
1951
- /* copy to return value here, because alter might free it! */ \
1952
- if (ZSTR_IS_INTERNED(val)) { \
1953
- RETVAL_INTERNED_STR(val); \
1954
- } else if (ZSTR_LEN(val) == 0) { \
1955
- RETVAL_EMPTY_STRING(); \
1956
- } else if (ZSTR_LEN(val) == 1) { \
1957
- RETVAL_CHAR(ZSTR_VAL(val)[0]); \
1958
- } else if (!(GC_FLAGS(val) & GC_PERSISTENT)) { \
1959
- ZVAL_NEW_STR(return_value, zend_string_copy(val)); \
1960
- } else { \
1961
- ZVAL_NEW_STR(return_value, zend_string_init(ZSTR_VAL(val), ZSTR_LEN(val), 0)); \
1962
- } \
1963
- } while (0)
1964
-
1965
1955
/* {{{ Get a configuration option */
1966
1956
PHP_FUNCTION (ini_get )
1967
1957
{
@@ -1977,7 +1967,7 @@ PHP_FUNCTION(ini_get)
1977
1967
RETURN_FALSE ;
1978
1968
}
1979
1969
1980
- INI_RETVAL_STR ( val );
1970
+ ZVAL_SET_INI_STR ( return_value , val );
1981
1971
}
1982
1972
/* }}} */
1983
1973
@@ -2082,7 +2072,7 @@ PHP_FUNCTION(ini_set)
2082
2072
val = zend_ini_get_value (varname );
2083
2073
2084
2074
if (val ) {
2085
- INI_RETVAL_STR ( val );
2075
+ ZVAL_SET_INI_STR ( return_value , val );
2086
2076
} else {
2087
2077
RETVAL_FALSE ;
2088
2078
}
@@ -2116,8 +2106,6 @@ PHP_FUNCTION(ini_set)
2116
2106
}
2117
2107
/* }}} */
2118
2108
2119
- #undef INI_RETVAL_STR
2120
-
2121
2109
/* {{{ Restore the value of a configuration option specified by varname */
2122
2110
PHP_FUNCTION (ini_restore )
2123
2111
{
0 commit comments