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