From 21661d3bde0023f36e5af15ff5926a30e367e948 Mon Sep 17 00:00:00 2001 From: Moriyoshi Koizumi Date: Wed, 7 May 2003 15:21:31 +0000 Subject: Added even better allocator codes for both expat & libxml --- ext/xml/xml.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'ext/xml/xml.c') 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; -- cgit v1.2.1