shane           Sun Oct 19 19:17:58 2003 EDT

  Modified files:              
    /php-src/ext/dom    php_dom.c 
    /php-src/ext/xml    xml.c 
    /php-src/ext/simplexml      simplexml.c 
    /php-src/ext/libxml libxml.c php_libxml.h 
  Log:
  add global init/shutdown functions for libxml.  this is required as
  shutdown is not safe to call multiple times, and to make streams work
  correctly some init stuff has to happen in a specific order
  
  
Index: php-src/ext/dom/php_dom.c
diff -u php-src/ext/dom/php_dom.c:1.36 php-src/ext/dom/php_dom.c:1.37
--- php-src/ext/dom/php_dom.c:1.36      Mon Oct  6 17:28:01 2003
+++ php-src/ext/dom/php_dom.c   Sun Oct 19 19:17:54 2003
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_dom.c,v 1.36 2003/10/06 21:28:01 rrichards Exp $ */
+/* $Id: php_dom.c,v 1.37 2003/10/19 23:17:54 shane Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -32,6 +32,7 @@
 #include "dom_properties.h"
 
 #include "ext/standard/info.h"
+#include "ext/libxml/php_libxml.h"
 #define PHP_XPATH 1
 #define PHP_XPTR 2
 
@@ -702,7 +703,7 @@
        REGISTER_LONG_CONSTANT("DOM_INVALID_ACCESS_ERR",        INVALID_ACCESS_ERR,    
         CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("DOM_VALIDATION_ERR",            VALIDATION_ERR,        
         CONST_CS | CONST_PERSISTENT);
 
-       xmlInitParser();
+       php_libxml_initialize();
 
        return SUCCESS;
 }
@@ -724,13 +725,17 @@
 #if defined(LIBXML_XPTR_ENABLED)
        php_info_print_table_row(2, "XPointer Support", "enabled");
 #endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+       php_info_print_table_row(2, "Schema Support", "enabled");
+       php_info_print_table_row(2, "RelaxNG Support", "enabled");
+#endif
        php_info_print_table_end();
 }
 /* }}} */
 
 PHP_MSHUTDOWN_FUNCTION(dom)
 {
-       xmlCleanupParser();
+       php_libxml_shutdown();
 
        zend_hash_destroy(&dom_domstringlist_prop_handlers);
        zend_hash_destroy(&dom_namelist_prop_handlers);
Index: php-src/ext/xml/xml.c
diff -u php-src/ext/xml/xml.c:1.140 php-src/ext/xml/xml.c:1.141
--- php-src/ext/xml/xml.c:1.140 Sun Aug 31 08:41:50 2003
+++ php-src/ext/xml/xml.c       Sun Oct 19 19:17:55 2003
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: xml.c,v 1.140 2003/08/31 12:41:50 zeev Exp $ */
+/* $Id: xml.c,v 1.141 2003/10/19 23:17:55 shane Exp $ */
 
 #define IS_EXT_MODULE
 
@@ -37,6 +37,9 @@
 
 #include "php_xml.h"
 # include "ext/standard/head.h"
+#ifdef LIBXML_EXPAT_COMPAT
+#include "ext/libxml/php_libxml.h"
+#endif
 
 /* Short-term TODO list:
  * - Implement XML_ExternalEntityParserCreate()
@@ -238,7 +241,7 @@
        php_xml_mem_hdlrs.free_fcn = php_xml_free_wrapper;
 
 #ifdef LIBXML_EXPAT_COMPAT
-       xmlInitParser();
+       php_libxml_initialize();
 #endif
        return SUCCESS;
 }
@@ -253,7 +256,7 @@
 PHP_MSHUTDOWN_FUNCTION(xml)
 {
 #ifdef LIBXML_EXPAT_COMPAT
-       xmlCleanupParser();
+       php_libxml_shutdown();
 #endif
        return SUCCESS;
 }
Index: php-src/ext/simplexml/simplexml.c
diff -u php-src/ext/simplexml/simplexml.c:1.64 php-src/ext/simplexml/simplexml.c:1.65
--- php-src/ext/simplexml/simplexml.c:1.64      Tue Oct  7 11:47:23 2003
+++ php-src/ext/simplexml/simplexml.c   Sun Oct 19 19:17:56 2003
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: simplexml.c,v 1.64 2003/10/07 15:47:23 zeev Exp $ */
+/* $Id: simplexml.c,v 1.65 2003/10/19 23:17:56 shane Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -28,6 +28,7 @@
 #include "php_ini.h"
 #include "ext/standard/info.h"
 #include "php_simplexml.h"
+#include "ext/libxml/php_libxml.h"
 
 zend_class_entry *sxe_class_entry;
 
@@ -1037,7 +1038,7 @@
        sxe.create_object = sxe_object_new;
        sxe_class_entry = zend_register_internal_class(&sxe TSRMLS_CC);
 
-       xmlInitParser();
+       php_libxml_initialize();
 
        return SUCCESS;
 }
@@ -1047,7 +1048,7 @@
  */
 PHP_MSHUTDOWN_FUNCTION(simplexml)
 {
-       xmlCleanupParser();
+       php_libxml_shutdown();
 
        return SUCCESS;
 }
@@ -1075,7 +1076,7 @@
 {
        php_info_print_table_start();
        php_info_print_table_header(2, "Simplexml support", "enabled");
-       php_info_print_table_row(2, "Revision", "$Revision: 1.64 $");
+       php_info_print_table_row(2, "Revision", "$Revision: 1.65 $");
        php_info_print_table_end();
 }
 /* }}} */
Index: php-src/ext/libxml/libxml.c
diff -u php-src/ext/libxml/libxml.c:1.1 php-src/ext/libxml/libxml.c:1.2
--- php-src/ext/libxml/libxml.c:1.1     Sun Oct 19 17:48:46 2003
+++ php-src/ext/libxml/libxml.c Sun Oct 19 19:17:56 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: libxml.c,v 1.1 2003/10/19 21:48:46 shane Exp $ */
+/* $Id: libxml.c,v 1.2 2003/10/19 23:17:56 shane Exp $ */
 
 #define IS_EXT_MODULE
 
@@ -42,6 +42,9 @@
 
 #include "php_libxml.h"
 
+/* a true global for initialization */
+int _php_libxml_initialized = 0;
+
 #ifdef ZTS
 int libxml_globals_id;
 #else
@@ -101,8 +104,7 @@
 int php_libxml_streams_IO_match_wrapper(const char *filename)
 {
        TSRMLS_FETCH();
-       return php_stream_locate_url_wrapper(filename, NULL, 
STREAM_LOCATE_WRAPPERS_ONLY TSRMLS_CC) ? 1 : 0;
-
+       return php_stream_locate_url_wrapper(filename, NULL, 0 TSRMLS_CC) ? 1 : 0;
 }
 
 void *php_libxml_streams_IO_open_wrapper(const char *filename)
@@ -134,31 +136,48 @@
        return php_stream_close((php_stream*)context);
 }
 
+PHP_LIBXML_API void php_libxml_initialize() {
+       if (!_php_libxml_initialized) {
+               /* we should be the only one's to ever init!! */
+               xmlInitParser();
+
+               /* Enable php stream/wrapper support for libxml 
+                  we only use php streams, so we do not enable
+                  the default io handlers in libxml.
+               */
+               xmlRegisterInputCallbacks(
+                       php_libxml_streams_IO_match_wrapper, 
+                       php_libxml_streams_IO_open_wrapper,
+                       php_libxml_streams_IO_read, 
+                       php_libxml_streams_IO_close);
+
+               xmlRegisterOutputCallbacks(
+                       php_libxml_streams_IO_match_wrapper, 
+                       php_libxml_streams_IO_open_wrapper,
+                       php_libxml_streams_IO_write, 
+                       php_libxml_streams_IO_close);
+
+               _php_libxml_initialized = 1;
+       }
+}
+
+PHP_LIBXML_API void php_libxml_shutdown() {
+       if (_php_libxml_initialized) {
+               xmlCleanupParser();
+               _php_libxml_initialized = 0;
+       }
+}
+
 PHP_MINIT_FUNCTION(libxml)
 {
-       /* Enable php stream/wrapper support for libxml 
-          we only use php streams, so we disable the libxml builtin
-          io support.
-       */
-       xmlCleanupInputCallbacks();
-       xmlRegisterInputCallbacks(
-               php_libxml_streams_IO_match_wrapper, 
-               php_libxml_streams_IO_open_wrapper,
-               php_libxml_streams_IO_read, 
-               php_libxml_streams_IO_close);
-
-       xmlCleanupOutputCallbacks();
-       xmlRegisterOutputCallbacks(
-               php_libxml_streams_IO_match_wrapper, 
-               php_libxml_streams_IO_open_wrapper,
-               php_libxml_streams_IO_write, 
-               php_libxml_streams_IO_close);
-       
+       php_libxml_initialize();
+
 #ifdef ZTS
        ts_allocate_id(&libxml_globals_id, sizeof(php_libxml_globals), 
(ts_allocate_ctor) php_libxml_init_globals, NULL);
 #else
        LIBXML(stream_context) = NULL;
 #endif
+
        return SUCCESS;
 }
 
@@ -171,6 +190,7 @@
 
 PHP_MSHUTDOWN_FUNCTION(libxml)
 {
+       php_libxml_shutdown();
        return SUCCESS;
 }
 
Index: php-src/ext/libxml/php_libxml.h
diff -u php-src/ext/libxml/php_libxml.h:1.1 php-src/ext/libxml/php_libxml.h:1.2
--- php-src/ext/libxml/php_libxml.h:1.1 Sun Oct 19 17:48:46 2003
+++ php-src/ext/libxml/php_libxml.h     Sun Oct 19 19:17:56 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_libxml.h,v 1.1 2003/10/19 21:48:46 shane Exp $ */
+/* $Id: php_libxml.h,v 1.2 2003/10/19 23:17:56 shane Exp $ */
 
 #ifndef PHP_LIBXML_H
 #define PHP_LIBXML_H
@@ -55,6 +55,9 @@
 #else
 #define LIBXML(v) (libxml_globals.v)
 #endif
+
+PHP_LIBXML_API void php_libxml_initialize();
+PHP_LIBXML_API void php_libxml_shutdown();
 
 #endif /* PHP_LIBXML_H */
 

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

Reply via email to