summaryrefslogtreecommitdiff
path: root/ext/xml/xml.c
diff options
context:
space:
mode:
authorMoriyoshi Koizumi <moriyoshi@php.net>2003-05-07 15:21:31 +0000
committerMoriyoshi Koizumi <moriyoshi@php.net>2003-05-07 15:21:31 +0000
commit21661d3bde0023f36e5af15ff5926a30e367e948 (patch)
treea7150f5f35f373dee7ec639b2d8225a490d0732d /ext/xml/xml.c
parentedac2587515fdb202663fc9ffc6b527d7a6da907 (diff)
downloadphp-git-21661d3bde0023f36e5af15ff5926a30e367e948.tar.gz
Added even better allocator codes for both expat & libxml
Diffstat (limited to 'ext/xml/xml.c')
-rw-r--r--ext/xml/xml.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/ext/xml/xml.c b/ext/xml/xml.c
index 04b654fae3..6b4a57a27f 100644
--- a/ext/xml/xml.c
+++ b/ext/xml/xml.c
@@ -152,6 +152,8 @@ xml_encoding xml_encodings[] = {
{ NULL, NULL, NULL }
};
+static XML_Memory_Handling_Suite php_xml_mem_hdlrs;
+
/* True globals, no need for thread safety */
static int le_xml_parser;
@@ -165,6 +167,21 @@ static void php_xml_init_globals(php_xml_globals *xml_globals_p TSRMLS_DC)
}
#endif
+static void *php_xml_malloc_wrapper(size_t sz)
+{
+ return emalloc(sz);
+}
+
+static void *php_xml_realloc_wrapper(void *ptr, size_t sz)
+{
+ return erealloc(ptr, sz);
+}
+
+static void php_xml_free_wrapper(void *ptr)
+{
+ efree(ptr);
+}
+
PHP_MINIT_FUNCTION(xml)
{
le_xml_parser = zend_register_list_destructors_ex(xml_parser_dtor, NULL, "xml", module_number);
@@ -203,10 +220,13 @@ PHP_MINIT_FUNCTION(xml)
REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_TAGSTART", PHP_XML_OPTION_SKIP_TAGSTART, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_WHITE", PHP_XML_OPTION_SKIP_WHITE, CONST_CS|CONST_PERSISTENT);
-#ifdef LIBXML_EXPAT_COMPAT
- xmlMemSetup(_efree, _emalloc, _erealloc, _estrdup);
-#endif
-
+ /* this object should not be pre-initialised at compile time,
+ as the order of members may vary */
+
+ php_xml_mem_hdlrs.malloc_fcn = php_xml_malloc_wrapper;
+ php_xml_mem_hdlrs.realloc_fcn = php_xml_realloc_wrapper;
+ php_xml_mem_hdlrs.free_fcn = php_xml_free_wrapper;
+
return SUCCESS;
}
@@ -1032,7 +1052,7 @@ PHP_FUNCTION(xml_parser_create)
}
parser = ecalloc(sizeof(xml_parser), 1);
- parser->parser = XML_ParserCreate(encoding);
+ parser->parser = XML_ParserCreate_MM(encoding, &php_xml_mem_hdlrs, NULL);
parser->target_encoding = encoding;
parser->case_folding = 1;
parser->object = NULL;
@@ -1088,7 +1108,7 @@ PHP_FUNCTION(xml_parser_create_ns)
}
parser = ecalloc(sizeof(xml_parser), 1);
- parser->parser = XML_ParserCreateNS(encoding, sep[0]);
+ parser->parser = XML_ParserCreate_MM(encoding, &php_xml_mem_hdlrs, sep);
parser->target_encoding = encoding;
parser->case_folding = 1;
parser->object = NULL;