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