diff --git a/contrib/xml2/xpath.c b/contrib/xml2/xpath.c index 8e289bdc49..1ce031fa37 100644 --- a/contrib/xml2/xpath.c +++ b/contrib/xml2/xpath.c @@ -1,5 +1,5 @@ /* - * $PostgreSQL: pgsql/contrib/xml2/xpath.c,v 1.27 2010/02/28 21:31:57 tgl Exp $ + * $PostgreSQL: pgsql/contrib/xml2/xpath.c,v 1.28 2010/03/01 05:16:35 tgl Exp $ * * Parser interface for DOM-based parser (libxml) rather than * stream-based SAX-type parser @@ -145,12 +145,8 @@ xml_is_well_formed(PG_FUNCTION_ARGS) doctree = xmlParseMemory((char *) VARDATA(t), docsize); if (doctree == NULL) - { - xmlCleanupParser(); PG_RETURN_BOOL(false); /* i.e. not well-formed */ - } xmlFreeDoc(doctree); - xmlCleanupParser(); PG_RETURN_BOOL(true); } @@ -297,7 +293,6 @@ xpath_nodeset(PG_FUNCTION_ARGS) xpres = pgxml_result_to_text(pgxml_xpath(PG_GETARG_TEXT_P(0), xpath), toptag, septag, NULL); - /* xmlCleanupParser(); done by result_to_text routine */ pfree(xpath); if (xpres == NULL) @@ -332,7 +327,6 @@ xpath_list(PG_FUNCTION_ARGS) xpres = pgxml_result_to_text(pgxml_xpath(PG_GETARG_TEXT_P(0), xpath), NULL, NULL, plainsep); - /* xmlCleanupParser(); done by result_to_text routine */ pfree(xpath); if (xpres == NULL) @@ -371,7 +365,6 @@ xpath_string(PG_FUNCTION_ARGS) xpres = pgxml_result_to_text(pgxml_xpath(PG_GETARG_TEXT_P(0), xpath), NULL, NULL, NULL); - xmlCleanupParser(); pfree(xpath); if (xpres == NULL) @@ -403,13 +396,10 @@ xpath_number(PG_FUNCTION_ARGS) pfree(xpath); if (res == NULL) - { - xmlCleanupParser(); PG_RETURN_NULL(); - } fRes = xmlXPathCastToNumber(res); - xmlCleanupParser(); + if (xmlXPathIsNaN(fRes)) PG_RETURN_NULL(); @@ -440,13 +430,10 @@ xpath_bool(PG_FUNCTION_ARGS) pfree(xpath); if (res == NULL) - { - xmlCleanupParser(); PG_RETURN_BOOL(false); - } bRes = xmlXPathCastToBoolean(res); - xmlCleanupParser(); + PG_RETURN_BOOL(bRes); } @@ -469,9 +456,7 @@ pgxml_xpath(text *document, xmlChar *xpath) doctree = xmlParseMemory((char *) VARDATA(document), docsize); if (doctree == NULL) - { /* not well-formed */ - return NULL; - } + return NULL; /* not well-formed */ ctxt = xmlXPathNewContext(doctree); ctxt->node = xmlDocGetRootElement(doctree); @@ -480,7 +465,6 @@ pgxml_xpath(text *document, xmlChar *xpath) comppath = xmlXPathCompile(xpath); if (comppath == NULL) { - xmlCleanupParser(); xmlFreeDoc(doctree); elog_error("XPath Syntax Error", true); } @@ -492,7 +476,6 @@ pgxml_xpath(text *document, xmlChar *xpath) if (res == NULL) { xmlXPathFreeContext(ctxt); - /* xmlCleanupParser(); */ xmlFreeDoc(doctree); return NULL; @@ -511,10 +494,8 @@ pgxml_result_to_text(xmlXPathObjectPtr res, text *xpres; if (res == NULL) - { - xmlCleanupParser(); return NULL; - } + switch (res->type) { case XPATH_NODESET: @@ -536,9 +517,6 @@ pgxml_result_to_text(xmlXPathObjectPtr res, xpres = cstring_to_text((char *) xpresstr); /* Free various storage */ - xmlCleanupParser(); - /* xmlFreeDoc(doctree); -- will die at end of tuple anyway */ - xmlFree(xpresstr); elog_error("XPath error", false); @@ -779,7 +757,6 @@ xpath_table(PG_FUNCTION_ARGS) comppath = xmlXPathCompile(xpaths[j]); if (comppath == NULL) { - xmlCleanupParser(); xmlFreeDoc(doctree); elog_error("XPath Syntax Error", true); } @@ -844,8 +821,6 @@ xpath_table(PG_FUNCTION_ARGS) pfree(xmldoc); } - xmlCleanupParser(); - tuplestore_donestoring(tupstore); SPI_finish(); diff --git a/contrib/xml2/xslt_proc.c b/contrib/xml2/xslt_proc.c index ddf90f9c71..4265a56116 100644 --- a/contrib/xml2/xslt_proc.c +++ b/contrib/xml2/xslt_proc.c @@ -1,5 +1,5 @@ /* - * $PostgreSQL: pgsql/contrib/xml2/xslt_proc.c,v 1.17 2010/02/28 19:51:37 tgl Exp $ + * $PostgreSQL: pgsql/contrib/xml2/xslt_proc.c,v 1.18 2010/03/01 05:16:35 tgl Exp $ * * XSLT processing functions (requiring libxslt) * @@ -79,7 +79,6 @@ xslt_process(PG_FUNCTION_ARGS) if (doctree == NULL) { - xmlCleanupParser(); elog_error("error parsing XML document", false); PG_RETURN_NULL(); @@ -93,7 +92,6 @@ xslt_process(PG_FUNCTION_ARGS) if (ssdoc == NULL) { xmlFreeDoc(doctree); - xmlCleanupParser(); elog_error("error parsing stylesheet as XML document", false); PG_RETURN_NULL(); } @@ -108,7 +106,6 @@ xslt_process(PG_FUNCTION_ARGS) { xmlFreeDoc(doctree); xsltCleanupGlobals(); - xmlCleanupParser(); elog_error("failed to parse stylesheet", false); PG_RETURN_NULL(); } @@ -121,7 +118,6 @@ xslt_process(PG_FUNCTION_ARGS) xmlFreeDoc(doctree); xsltCleanupGlobals(); - xmlCleanupParser(); if (resstat < 0) PG_RETURN_NULL();