phanto          Sun Jan 19 07:18:46 2003 EDT

  Modified files:              
    /php4/ext/standard  basic_functions.c 
  Log:
  ini patch to allow 'entry[] = value' entries
  
Index: php4/ext/standard/basic_functions.c
diff -u php4/ext/standard/basic_functions.c:1.563 
php4/ext/standard/basic_functions.c:1.564
--- php4/ext/standard/basic_functions.c:1.563   Sat Jan 18 10:03:00 2003
+++ php4/ext/standard/basic_functions.c Sun Jan 19 07:18:46 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: basic_functions.c,v 1.563 2003/01/18 15:03:00 andrey Exp $ */
+/* $Id: basic_functions.c,v 1.564 2003/01/19 12:18:46 phanto Exp $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -2824,51 +2824,60 @@
                        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);
        }
 }
 



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to