return XML_ParserCreate_MM(encoding, NULL, tmp);
}
-static void *(*_expat_cpt_malloc_fcn)(size_t sz);
-
-static char *_expat_cpt_intn_strdup(const char *str)
-{
- size_t len;
- char *retval;
-
- len = strlen(str);
- if ((retval = _expat_cpt_malloc_fcn(len + 1)) == NULL) {
- return NULL;
- }
- memcpy(retval, str, len + 1);
-
- return retval;
-}
-
XML_Parser
XML_ParserCreate_MM(const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite, const XML_Char *sep)
{
XML_Parser parser;
- static XML_Memory_Handling_Suite mtemp_i = { malloc, realloc, free };
-
- if (memsuite == NULL) {
- memsuite = &mtemp_i;
- }
-
- _expat_cpt_malloc_fcn = memsuite->malloc_fcn; /* FIXME: not reentrant ! */
-
- xmlMemSetup(memsuite->free_fcn, memsuite->malloc_fcn, memsuite->realloc_fcn, _expat_cpt_intn_strdup); /* WHOCANFIXME: not reentrant ! */
- parser = (XML_Parser) memsuite->malloc_fcn(sizeof(struct _XML_Parser));
+ parser = (XML_Parser) emalloc(sizeof(struct _XML_Parser));
memset(parser, 0, sizeof(struct _XML_Parser));
parser->use_namespace = 0;
parser->mem_hdlrs = *memsuite;
parser->parser = xmlCreatePushParserCtxt((xmlSAXHandlerPtr) &php_xml_compat_handlers, (void *) parser, NULL, 0, NULL);
if (parser->parser == NULL) {
+ efree(parser);
return NULL;
}
if (encoding != NULL) {
xmlHashFree(parser->_reverse_ns_map, _free_ns_name);
}
xmlFreeParserCtxt(parser->parser);
- parser->mem_hdlrs.free_fcn(parser);
+ efree(parser);
}
#endif /* LIBXML_EXPAT_COMPAT */