summaryrefslogtreecommitdiff
path: root/ext/standard
diff options
context:
space:
mode:
authorHarald Radi <phanto@php.net>2003-01-19 12:18:46 +0000
committerHarald Radi <phanto@php.net>2003-01-19 12:18:46 +0000
commitb51b6f0fbfe7b405e49c203bea412f18846a969b (patch)
tree80d1ac40fbe6506bf30ff83a808a42fbfd0aa019 /ext/standard
parent697398e18ec87060f1f62a96e6e666d326eda0a9 (diff)
downloadphp-git-b51b6f0fbfe7b405e49c203bea412f18846a969b.tar.gz
ini patch to allow 'entry[] = value' entries
Diffstat (limited to 'ext/standard')
-rw-r--r--ext/standard/basic_functions.c63
1 files changed, 36 insertions, 27 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index ed882249f8..bac068e51d 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -2824,54 +2824,63 @@ static void php_simple_ini_parser_cb(zval *arg1, zval *arg2, int callback_type,
zend_hash_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &element, sizeof(zval *), NULL);
break;
- case ZEND_INI_PARSER_SECTION:
- break;
- }
-}
-
-static void php_ini_parser_cb_with_sections(zval *arg1, zval *arg2, int callback_type, zval *arr)
-{
- zval *element;
- TSRMLS_FETCH();
-
- switch (callback_type) {
-
- case ZEND_INI_PARSER_ENTRY:
+ case ZEND_INI_PARSER_POP_ENTRY:
{
- zval *active_arr;
+ zval *hash, **find_hash;
if (!arg2) {
/* bare string - nothing to do */
break;
}
- if (BG(active_ini_file_section)) {
- active_arr = BG(active_ini_file_section);
+ if (zend_hash_find(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, (void **) &find_hash) == FAILURE) {
+ ALLOC_ZVAL(hash);
+ INIT_PZVAL(hash);
+ array_init(hash);
+
+ zend_hash_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &hash, sizeof(zval *), NULL);
} else {
- active_arr = arr;
+ hash = *find_hash;
}
+
ALLOC_ZVAL(element);
*element = *arg2;
zval_copy_ctor(element);
INIT_PZVAL(element);
- zend_hash_update(Z_ARRVAL_P(active_arr), Z_STRVAL_P(arg1),
- Z_STRLEN_P(arg1)+1, &element,
- sizeof(zval *), NULL);
+ add_next_index_zval(hash, element);
}
break;
case ZEND_INI_PARSER_SECTION:
- MAKE_STD_ZVAL(BG(active_ini_file_section));
- array_init(BG(active_ini_file_section));
- zend_hash_update( Z_ARRVAL_P(arr),
- Z_STRVAL_P(arg1),
- Z_STRLEN_P(arg1)+1,
- &BG(active_ini_file_section),
- sizeof(zval *), NULL);
break;
}
}
+static void php_ini_parser_cb_with_sections(zval *arg1, zval *arg2, int callback_type, zval *arr)
+{
+ TSRMLS_FETCH();
+
+ if (callback_type == ZEND_INI_PARSER_SECTION) {
+ MAKE_STD_ZVAL(BG(active_ini_file_section));
+ array_init(BG(active_ini_file_section));
+ zend_hash_update( Z_ARRVAL_P(arr),
+ Z_STRVAL_P(arg1),
+ Z_STRLEN_P(arg1)+1,
+ &BG(active_ini_file_section),
+ sizeof(zval *), NULL);
+ } else if (arg2) {
+ zval *active_arr;
+
+ if (BG(active_ini_file_section)) {
+ active_arr = BG(active_ini_file_section);
+ } else {
+ active_arr = arr;
+ }
+
+ php_simple_ini_parser_cb(arg1, arg2, callback_type, active_arr);
+ }
+}
+
/* {{{ proto array parse_ini_file(string filename [, bool process_sections])
Parse configuration file */