sas             Sun Jan 14 19:21:05 2001 EDT

  Modified files:              
    /php4/main  php_ini.c php_globals.h 
  Log:
  Defer loading of extensions until all configuration entries have been
  added to the configuration hash.
  
  
Index: php4/main/php_ini.c
diff -u php4/main/php_ini.c:1.47 php4/main/php_ini.c:1.48
--- php4/main/php_ini.c:1.47    Sat Jan 13 05:10:50 2001
+++ php4/main/php_ini.c Sun Jan 14 19:21:05 2001
@@ -117,7 +117,6 @@
     }
 }
 
-
 static void php_config_ini_parser_cb(zval *arg1, zval *arg2, int callback_type, void 
*arg)
 {
        switch (callback_type) {
@@ -128,9 +127,13 @@
                                        break;
                                }
                                if (!strcasecmp(Z_STRVAL_P(arg1), "extension")) { /* 
load function module */
-                                       zval dummy;
-
-                                       php_dl(arg2, MODULE_PERSISTENT, &dummy);
+                                       zval copy;
+                                       PLS_FETCH();
+                                       
+                                       copy = *arg2;
+                                       zval_copy_ctor(&copy);
+                                       copy.refcount = 0;
+                                       
+zend_llist_add_element(&PG(ini_extension_list), &copy);
                                } else if (!strcasecmp(Z_STRVAL_P(arg1), 
ZEND_EXTENSION_TOKEN)) { /* load Zend extension */
                                        zend_load_extension(Z_STRVAL_P(arg2));
                                } else {
@@ -144,6 +147,15 @@
        }
 }
 
+static void php_apply_ini_extension_list(void *dummy)
+{
+       zval *extension = (zval *) dummy;
+       zval zval;
+
+       php_dl(extension, MODULE_PERSISTENT, &zval);
+       zval_dtor(extension);
+}
+
 
 int php_init_config(char *php_ini_path_override)
 {
@@ -158,6 +170,8 @@
                return FAILURE;
        }
 
+       zend_llist_init(&PG(ini_extension_list), sizeof(zval), NULL, 1);
+       
        safe_mode_state = PG(safe_mode);
        open_basedir = PG(open_basedir);
 
@@ -209,6 +223,9 @@
 
        zend_parse_ini_file(&fh, 1, php_config_ini_parser_cb, NULL);
 
+       zend_llist_apply(&PG(ini_extension_list), php_apply_ini_extension_list);
+       zend_llist_destroy(&PG(ini_extension_list));
+       
        if (php_ini_opened_path) {
                zval tmp;
                
Index: php4/main/php_globals.h
diff -u php4/main/php_globals.h:1.59 php4/main/php_globals.h:1.60
--- php4/main/php_globals.h:1.59        Mon Nov 13 10:54:37 2000
+++ php4/main/php_globals.h     Sun Jan 14 19:21:05 2001
@@ -124,6 +124,8 @@
        zend_bool during_request_startup;
 
        zend_bool allow_url_fopen;
+
+       zend_llist ini_extension_list;
 };
 
 



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to