From dd6061e8d91aa0a21e69223a30827c2f45a9e01b Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Tue, 15 Oct 2002 16:06:47 +0000 Subject: [PATCH] added the possibility to register a transformation context specific error * libxslt/xsltInternals.h libxslt/xsltutils.[ch]: added the possibility to register a transformation context specific error handler, with xsltSetTransformErrorFunc() and provided a new routine xsltTransformError() to handle contextual errors, this should fix #94435 * libxslt/*.c: modified all the code to use the context specific error handling, as a result xsltPrintErrorContext() is not called anymore except internally from xsltTransformError() Daniel --- ChangeLog | 11 ++++ libxslt/attributes.c | 14 ++--- libxslt/documents.c | 15 ++--- libxslt/extensions.c | 77 +++++++++-------------- libxslt/extra.c | 9 +-- libxslt/functions.c | 80 +++++++----------------- libxslt/imports.c | 27 +++----- libxslt/keys.c | 18 ++---- libxslt/namespaces.c | 15 ++--- libxslt/numbers.c | 3 +- libxslt/pattern.c | 90 +++++++++------------------ libxslt/preproc.c | 102 ++++++++++-------------------- libxslt/security.c | 24 +++---- libxslt/templates.c | 3 +- libxslt/templates.h | 7 +++ libxslt/transform.c | 162 ++++++++++++++++-------------------------------- libxslt/variables.c | 60 ++++++------------ libxslt/xslt.c | 96 ++++++++++------------------ libxslt/xsltInternals.h | 3 + libxslt/xsltutils.c | 123 +++++++++++++++++++++++++++++------- libxslt/xsltutils.h | 8 +++ 21 files changed, 394 insertions(+), 553 deletions(-) diff --git a/ChangeLog b/ChangeLog index cf71155..8f8768c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Tue Oct 15 18:02:37 CEST 2002 Daniel Veillard + + * libxslt/xsltInternals.h libxslt/xsltutils.[ch]: added the + possibility to register a transformation context specific + error handler, with xsltSetTransformErrorFunc() and provided + a new routine xsltTransformError() to handle contextual errors, + this should fix #94435 + * libxslt/*.c: modified all the code to use the context specific + error handling, as a result xsltPrintErrorContext() is not called + anymore except internally from xsltTransformError() + Tue Oct 15 14:52:23 CEST 2002 Daniel Veillard * libxslt/transform.c: closing #94933, any error will make diff --git a/libxslt/attributes.c b/libxslt/attributes.c index febee1a..45fff85 100644 --- a/libxslt/attributes.c +++ b/libxslt/attributes.c @@ -533,8 +533,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, xmlNodePtr node, if (ctxt->insert == NULL) return; if (comp == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:attribute : compilation failed\n"); return; } @@ -546,8 +545,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, xmlNodePtr node, return; } if (ctxt->insert->children != NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:attribute : node already has children\n"); return; } @@ -562,8 +560,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, xmlNodePtr node, xsltEvalAttrValueTemplate(ctxt, inst, (const xmlChar *) "name", XSLT_NAMESPACE); if (prop == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:attribute : name is missing\n"); goto error; } @@ -597,9 +594,8 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, xmlNodePtr node, if (prefix != NULL) { ns = xmlSearchNs(inst->doc, inst, prefix); if (ns == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, - "xsl:attribute : no namespace bound to prefix %s\n", + xsltTransformError(ctxt, NULL, inst, + "xsl:attribute : no namespace bound to prefix %s\n", prefix); } else { ns = xsltGetNamespace(ctxt, inst, ns, ctxt->insert); diff --git a/libxslt/documents.c b/libxslt/documents.c index 7c3b9eb..e0c817e 100644 --- a/libxslt/documents.c +++ b/libxslt/documents.c @@ -52,8 +52,7 @@ xsltNewDocument(xsltTransformContextPtr ctxt, xmlDocPtr doc) { cur = (xsltDocumentPtr) xmlMalloc(sizeof(xsltDocument)); if (cur == NULL) { - xsltPrintErrorContext(ctxt, NULL, (xmlNodePtr) doc); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, (xmlNodePtr) doc, "xsltNewDocument : malloc failed\n"); return(NULL); } @@ -80,8 +79,7 @@ xsltNewStyleDocument(xsltStylesheetPtr style, xmlDocPtr doc) { cur = (xsltDocumentPtr) xmlMalloc(sizeof(xsltDocument)); if (cur == NULL) { - xsltPrintErrorContext(NULL, style, (xmlNodePtr) doc); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, (xmlNodePtr) doc, "xsltNewStyleDocument : malloc failed\n"); return(NULL); } @@ -172,8 +170,7 @@ xsltLoadDocument(xsltTransformContextPtr ctxt, const xmlChar *URI) { res = xsltCheckRead(ctxt->sec, ctxt, URI); if (res == 0) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "xsltLoadDocument: read rights for %s denied\n", URI); return(NULL); @@ -199,8 +196,7 @@ xsltLoadDocument(xsltTransformContextPtr ctxt, const xmlChar *URI) { #ifdef LIBXML_XINCLUDE_ENABLED xmlXIncludeProcess(doc); #else - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "xsltLoadDocument(%s) : XInclude processing not compiled in\n", URI); #endif @@ -242,8 +238,7 @@ xsltLoadStyleDocument(xsltStylesheetPtr style, const xmlChar *URI) { res = xsltCheckRead(sec, NULL, URI); if (res == 0) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltLoadStyleDocument: read rights for %s denied\n", URI); return(NULL); diff --git a/libxslt/extensions.c b/libxslt/extensions.c index befd8af..a50e8e0 100644 --- a/libxslt/extensions.c +++ b/libxslt/extensions.c @@ -95,8 +95,7 @@ xsltNewExtDef(const xmlChar * prefix, const xmlChar * URI) cur = (xsltExtDefPtr) xmlMalloc(sizeof(xsltExtDef)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewExtDef : malloc failed\n"); return (NULL); } @@ -163,8 +162,7 @@ xsltNewExtModule(xsltExtInitFunction initFunc, cur = (xsltExtModulePtr) xmlMalloc(sizeof(xsltExtModule)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewExtModule : malloc failed\n"); return (NULL); } @@ -206,8 +204,7 @@ xsltNewExtData(xsltExtModulePtr extModule, void *extData) return(NULL); cur = (xsltExtDataPtr) xmlMalloc(sizeof(xsltExtData)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewExtData : malloc failed\n"); return (NULL); } @@ -249,8 +246,7 @@ xsltNewExtElement (xsltPreComputeFunction precomp, cur = (xsltExtElementPtr) xmlMalloc(sizeof(xsltExtElement)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewExtElement : malloc failed\n"); return (NULL); } @@ -524,8 +520,7 @@ xsltGetExtData(xsltTransformContextPtr ctxt, const xmlChar * URI) { return (NULL); if (xmlHashAddEntry(ctxt->extInfos, URI, (void *) data) < 0) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "Failed to register module data: %s\n", URI); if (module->shutdownFunc) module->shutdownFunc(ctxt, URI, extData); @@ -984,8 +979,7 @@ xsltNewElemPreComp (xsltStylesheetPtr style, xmlNodePtr inst, cur = (xsltElemPreCompPtr) xmlMalloc (sizeof(xsltElemPreComp)); if (cur == NULL) { - xsltPrintErrorContext(NULL, style, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, NULL, "xsltNewExtElement : malloc failed\n"); return (NULL); } @@ -1307,29 +1301,25 @@ xsltExtFunctionTest(xmlXPathParserContextPtr ctxt, int nargs ATTRIBUTE_UNUSED) " calling xsltGetExtData\n"); data = xsltGetExtData(tctxt, (const xmlChar *) XSLT_DEFAULT_URL); if (data == NULL) { - xsltPrintErrorContext(tctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(tctxt, NULL, NULL, "xsltExtElementTest: not initialized\n"); return; } } if (tctxt == NULL) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "xsltExtFunctionTest: failed to get the transformation context\n"); return; } if (data == NULL) data = xsltGetExtData(tctxt, (const xmlChar *) XSLT_DEFAULT_URL); if (data == NULL) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "xsltExtFunctionTest: failed to get module data\n"); return; } if (data != testData) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "xsltExtFunctionTest: got wrong module data\n"); return; } @@ -1352,8 +1342,7 @@ xsltExtElementPreCompTest(xsltStylesheetPtr style, xmlNodePtr inst, xsltElemPreCompPtr ret; if (style == NULL) { - xsltPrintErrorContext(NULL, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, inst, "xsltExtElementTest: no transformation context\n"); return (NULL); } @@ -1363,16 +1352,14 @@ xsltExtElementPreCompTest(xsltStylesheetPtr style, xmlNodePtr inst, " calling xsltStyleGetExtData\n"); xsltStyleGetExtData(style, (const xmlChar *) XSLT_DEFAULT_URL); if (testStyleData == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsltExtElementPreCompTest: not initialized\n"); style->errors++; return (NULL); } } if (inst == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsltExtElementPreCompTest: no instruction\n"); style->errors++; return (NULL); @@ -1403,33 +1390,28 @@ xsltExtElementTest(xsltTransformContextPtr ctxt, xmlNodePtr node, " calling xsltGetExtData\n"); xsltGetExtData(ctxt, (const xmlChar *) XSLT_DEFAULT_URL); if (testData == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltExtElementTest: not initialized\n"); return; } } if (ctxt == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltExtElementTest: no transformation context\n"); return; } if (node == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltExtElementTest: no current node\n"); return; } if (inst == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltExtElementTest: no instruction\n"); return; } if (ctxt->insert == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltExtElementTest: no insertion point\n"); return; } @@ -1456,15 +1438,13 @@ xsltExtInitTest(xsltTransformContextPtr ctxt, const xmlChar * URI) { " calling xsltStyleGetExtData\n"); xsltStyleGetExtData(ctxt->style, URI); if (testStyleData == NULL) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "xsltExtInitTest: not initialized\n"); return (NULL); } } if (testData != NULL) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "xsltExtInitTest: already initialized\n"); return (NULL); } @@ -1487,14 +1467,12 @@ static void xsltExtShutdownTest(xsltTransformContextPtr ctxt, const xmlChar * URI, void *data) { if (testData == NULL) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "xsltExtShutdownTest: not initialized\n"); return; } if (data != testData) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "xsltExtShutdownTest: wrong data\n"); } testData = NULL; @@ -1515,8 +1493,7 @@ xsltExtStyleInitTest(xsltStylesheetPtr style ATTRIBUTE_UNUSED, const xmlChar * URI) { if (testStyleData != NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltExtInitTest: already initialized\n"); return (NULL); } @@ -1544,8 +1521,7 @@ xsltExtStyleShutdownTest(xsltStylesheetPtr style ATTRIBUTE_UNUSED, return; } if (data != testStyleData) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltExtShutdownTest: wrong data\n"); } testStyleData = NULL; @@ -1588,7 +1564,10 @@ xsltCleanupGlobals(void) } static void -xsltDebugDumpExtensionsCallback(void* function, FILE *output, const xmlChar* name, const xmlChar* URI, const xmlChar* not_used) { +xsltDebugDumpExtensionsCallback(void* function ATTRIBUTE_UNUSED, + FILE *output, const xmlChar* name, + const xmlChar* URI, + const xmlChar* not_used ATTRIBUTE_UNUSED) { if (!name||!URI) return; fprintf(output,"{%s}%s\n",URI,name); diff --git a/libxslt/extra.c b/libxslt/extra.c index de5964e..51b6c73 100644 --- a/libxslt/extra.c +++ b/libxslt/extra.c @@ -131,8 +131,7 @@ xsltDebug(xsltTransformContextPtr ctxt, xmlNodePtr node ATTRIBUTE_UNUSED, void xsltFunctionNodeSet(xmlXPathParserContextPtr ctxt, int nargs){ if (nargs != 1) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "node-set() : expects one result-tree arg\n"); ctxt->error = XPATH_INVALID_ARITY; return; @@ -140,8 +139,7 @@ xsltFunctionNodeSet(xmlXPathParserContextPtr ctxt, int nargs){ if ((ctxt->value == NULL) || ((ctxt->value->type != XPATH_XSLT_TREE) && (ctxt->value->type != XPATH_NODESET))) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "node-set() invalid arg expecting a result tree\n"); ctxt->error = XPATH_INVALID_TYPE; return; @@ -183,8 +181,7 @@ xsltFunctionLocalTime(xmlXPathParserContextPtr ctxt, int nargs) { struct tm *local_tm; if (nargs != 1) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "localTime() : invalid number of args %d\n", nargs); ctxt->error = XPATH_INVALID_ARITY; return; diff --git a/libxslt/functions.c b/libxslt/functions.c index a4c5707..5584106 100644 --- a/libxslt/functions.c +++ b/libxslt/functions.c @@ -114,18 +114,14 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs) if ((nargs < 1) || (nargs > 2)) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, - NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "document() : invalid number of args %d\n", nargs); ctxt->error = XPATH_INVALID_ARITY; return; } if (ctxt->value == NULL) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, - NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "document() : invalid arg value\n"); ctxt->error = XPATH_INVALID_TYPE; return; @@ -133,9 +129,7 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs) if (nargs == 2) { if (ctxt->value->type != XPATH_NODESET) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), - NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "document() : invalid arg expecting a nodeset\n"); ctxt->error = XPATH_INVALID_TYPE; return; @@ -182,9 +176,7 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs) */ xmlXPathStringFunction(ctxt, 1); if (ctxt->value->type != XPATH_STRING) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, - NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "document() : invalid arg expecting a string\n"); ctxt->error = XPATH_INVALID_TYPE; if (obj2 != NULL) @@ -227,9 +219,7 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs) tctxt = xsltXPathGetTransformContext(ctxt); if (tctxt == NULL) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), - NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "document() : internal error tctxt == NULL\n"); valuePush(ctxt, xmlXPathNewNodeSet(NULL)); } else { @@ -274,8 +264,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ xsltTransformContextPtr tctxt; if (nargs != 2) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "key() : expects two arguments\n"); ctxt->error = XPATH_INVALID_ARITY; return; @@ -284,8 +273,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ obj2 = valuePop(ctxt); if ((obj2 == NULL) || (ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "key() : invalid arg expecting a string\n"); ctxt->error = XPATH_INVALID_TYPE; xmlXPathFreeObject(obj2); @@ -331,9 +319,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ if (prefix != NULL) { keyURI = xmlXPathNsLookup(ctxt->context, prefix); if (keyURI == NULL) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), - NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "key() : prefix %s is not bound\n", prefix); } xmlFree(prefix); @@ -348,9 +334,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ valuePush(ctxt, obj2); xmlXPathStringFunction(ctxt, 1); if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), - NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "key() : invalid arg expecting a string\n"); ctxt->error = XPATH_INVALID_TYPE; xmlXPathFreeObject(obj1); @@ -498,9 +482,7 @@ xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){ if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_NODESET)) { ctxt->error = XPATH_INVALID_TYPE; - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), - NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "generate-id() : invalid arg expecting a node-set\n"); return; } @@ -519,8 +501,7 @@ xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){ } xmlXPathFreeObject(obj); } else { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "generate-id() : invalid number of args %d\n", nargs); ctxt->error = XPATH_INVALID_ARITY; return; @@ -550,15 +531,13 @@ xsltSystemPropertyFunction(xmlXPathParserContextPtr ctxt, int nargs){ const xmlChar *nsURI = NULL; if (nargs != 1) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "system-property() : expects one string arg\n"); ctxt->error = XPATH_INVALID_ARITY; return; } if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "system-property() : invalid arg expecting a string\n"); ctxt->error = XPATH_INVALID_TYPE; return; @@ -573,9 +552,7 @@ xsltSystemPropertyFunction(xmlXPathParserContextPtr ctxt, int nargs){ } else { nsURI = xmlXPathNsLookup(ctxt->context, prefix); if (nsURI == NULL) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), - NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "system-property() : prefix %s is not bound\n", prefix); } } @@ -647,15 +624,13 @@ xsltElementAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs){ xsltTransformContextPtr tctxt; if (nargs != 1) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "element-available() : expects one string arg\n"); ctxt->error = XPATH_INVALID_ARITY; return; } if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "element-available() : invalid arg expecting a string\n"); ctxt->error = XPATH_INVALID_TYPE; return; @@ -663,8 +638,7 @@ xsltElementAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs){ obj = valuePop(ctxt); tctxt = xsltXPathGetTransformContext(ctxt); if (tctxt == NULL) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "element-available() : internal error tctxt == NULL\n"); xmlXPathFreeObject(obj); valuePush(ctxt, xmlXPathNewBoolean(0)); @@ -682,9 +656,7 @@ xsltElementAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs){ } else { nsURI = xmlXPathNsLookup(ctxt->context, prefix); if (nsURI == NULL) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), - NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "element-available() : prefix %s is not bound\n", prefix); } } @@ -717,15 +689,13 @@ xsltFunctionAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs){ const xmlChar *nsURI = NULL; if (nargs != 1) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "function-available() : expects one string arg\n"); ctxt->error = XPATH_INVALID_ARITY; return; } if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "function-available() : invalid arg expecting a string\n"); ctxt->error = XPATH_INVALID_TYPE; return; @@ -738,9 +708,7 @@ xsltFunctionAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs){ } else { nsURI = xmlXPathNsLookup(ctxt->context, prefix); if (nsURI == NULL) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), - NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "function-available() : prefix %s is not bound\n", prefix); } } @@ -771,16 +739,14 @@ xsltCurrentFunction(xmlXPathParserContextPtr ctxt, int nargs){ xsltTransformContextPtr tctxt; if (nargs != 0) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "current() : function uses no argument\n"); ctxt->error = XPATH_INVALID_ARITY; return; } tctxt = xsltXPathGetTransformContext(ctxt); if (tctxt == NULL) { - xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "current() : internal error tctxt == NULL\n"); valuePush(ctxt, xmlXPathNewNodeSet(NULL)); } else { diff --git a/libxslt/imports.c b/libxslt/imports.c index 8842af7..35a0230 100644 --- a/libxslt/imports.c +++ b/libxslt/imports.c @@ -78,8 +78,7 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) { uriRef = xsltGetNsProp(cur, (const xmlChar *)"href", XSLT_NAMESPACE); if (uriRef == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:import : missing href attribute\n"); goto error; } @@ -87,8 +86,7 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) { base = xmlNodeGetBase(style->doc, cur); URI = xmlBuildURI(uriRef, base); if (URI == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:import : invalid URI reference %s\n", uriRef); goto error; } @@ -98,12 +96,11 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) { */ sec = xsltGetDefaultSecurityPrefs(); if (sec != NULL) { - int res; + int secres; - res = xsltCheckRead(sec, NULL, URI); - if (res == 0) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + secres = xsltCheckRead(sec, NULL, URI); + if (secres == 0) { + xsltTransformError(NULL, NULL, NULL, "xsl:import: read rights for %s denied\n", URI); goto error; @@ -112,8 +109,7 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) { import = xmlParseFile((const char *)URI); if (import == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:import : unable to load %s\n", URI); goto error; } @@ -164,8 +160,7 @@ xsltParseStylesheetInclude(xsltStylesheetPtr style, xmlNodePtr cur) { uriRef = xsltGetNsProp(cur, (const xmlChar *)"href", XSLT_NAMESPACE); if (uriRef == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:include : missing href attribute\n"); goto error; } @@ -173,16 +168,14 @@ xsltParseStylesheetInclude(xsltStylesheetPtr style, xmlNodePtr cur) { base = xmlNodeGetBase(style->doc, cur); URI = xmlBuildURI(uriRef, base); if (URI == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:include : invalid URI reference %s\n", uriRef); goto error; } include = xsltLoadStyleDocument(style, URI); if (include == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:include : unable to load %s\n", URI); goto error; } diff --git a/libxslt/keys.c b/libxslt/keys.c index 8486c36..d4f7a57 100644 --- a/libxslt/keys.c +++ b/libxslt/keys.c @@ -76,8 +76,7 @@ xsltNewKeyDef(const xmlChar *name, const xmlChar *nameURI) { cur = (xsltKeyDefPtr) xmlMalloc(sizeof(xsltKeyDef)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewKeyDef : malloc failed\n"); return(NULL); } @@ -147,8 +146,7 @@ xsltNewKeyTable(const xmlChar *name, const xmlChar *nameURI) { cur = (xsltKeyTablePtr) xmlMalloc(sizeof(xsltKeyTable)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewKeyTable : malloc failed\n"); return(NULL); } @@ -265,8 +263,7 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name, end++; } if (current == end) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "key pattern is empty\n"); style->errors++; goto error; @@ -296,16 +293,14 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name, #endif key->comp = xmlXPathCompile(pattern); if (key->comp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:key : XPath pattern compilation failed '%s'\n", pattern); style->errors++; } key->usecomp = xmlXPathCompile(use); if (key->usecomp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:key : XPath pattern compilation failed '%s'\n", use); style->errors++; @@ -419,8 +414,7 @@ xsltEvalXPathKeys(xsltTransformContextPtr ctxt, xmlXPathCompExprPtr comp) { res->stringval = NULL; } } else { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "xpath : string() function didn't return a String\n"); } } diff --git a/libxslt/namespaces.c b/libxslt/namespaces.c index 16796ff..ba99118 100644 --- a/libxslt/namespaces.c +++ b/libxslt/namespaces.c @@ -70,16 +70,14 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) { sprefix = xsltGetNsProp(node, (const xmlChar *)"stylesheet-prefix", XSLT_NAMESPACE); if (sprefix == NULL) { - xsltPrintErrorContext(NULL, style, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, node, "namespace-alias: stylesheet-prefix attribute missing\n"); return; } rprefix = xsltGetNsProp(node, (const xmlChar *)"result-prefix", XSLT_NAMESPACE); if (rprefix == NULL) { - xsltPrintErrorContext(NULL, style, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, node, "namespace-alias: result-prefix attribute missing\n"); goto error; } @@ -89,8 +87,7 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) { sNs = xmlSearchNs(node->doc, node, sprefix); } if ((sNs == NULL) || (sNs->href == NULL)) { - xsltPrintErrorContext(NULL, style, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, node, "namespace-alias: prefix %s not bound to any namespace\n", sprefix); goto error; @@ -101,8 +98,7 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) { rNs = xmlSearchNs(node->doc, node, rprefix); } if ((rNs == NULL) || (rNs->href == NULL)) { - xsltPrintErrorContext(NULL, style, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, node, "namespace-alias: prefix %s not bound to any namespace\n", rprefix); goto error; @@ -110,8 +106,7 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) { if (style->nsAliases == NULL) style->nsAliases = xmlHashCreate(10); if (style->nsAliases == NULL) { - xsltPrintErrorContext(NULL, style, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, node, "namespace-alias: cannot create hash table\n"); goto error; } diff --git a/libxslt/numbers.c b/libxslt/numbers.c index b31e586..e99aed2 100644 --- a/libxslt/numbers.c +++ b/libxslt/numbers.c @@ -1073,8 +1073,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, OUTPUT_NUMBER: if (found_error != 0) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltFormatNumberConversion : error in format string, using default\n"); default_sign = (number < 0.0) ? 1 : 0; prefix_length = suffix_length = 0; diff --git a/libxslt/pattern.c b/libxslt/pattern.c index d61ca14..c88b33d 100644 --- a/libxslt/pattern.c +++ b/libxslt/pattern.c @@ -125,8 +125,7 @@ xsltNewCompMatch(void) { cur = (xsltCompMatchPtr) xmlMalloc(sizeof(xsltCompMatch)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewCompMatch : malloc failed\n"); return(NULL); } @@ -205,8 +204,7 @@ xsltNewParserContext(xsltStylesheetPtr style, xsltTransformContextPtr ctxt) { cur = (xsltParserContextPtr) xmlMalloc(sizeof(xsltParserContext)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewParserContext : malloc failed\n"); return(NULL); } @@ -246,8 +244,7 @@ xsltCompMatchAdd(xsltParserContextPtr ctxt, xsltCompMatchPtr comp, xsltOp op, xmlChar * value, xmlChar * value2) { if (comp->nbStep >= 40) { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompMatchAdd: overflow\n"); return (-1); } @@ -366,8 +363,7 @@ xsltTestCompMatch(xsltTransformContextPtr ctxt, xsltCompMatchPtr comp, xsltStepOpPtr step, select = NULL; if ((comp == NULL) || (node == NULL) || (ctxt == NULL)) { - xsltPrintErrorContext(ctxt, NULL, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, node, "xsltTestCompMatch: null arg\n"); return(-1); } @@ -1192,8 +1188,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) { xmlChar *lit2 = NULL; if (CUR != '(') { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : ( expected\n"); ctxt->error = 1; return; @@ -1206,8 +1201,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) { return; SKIP_BLANKS; if (CUR != ')') { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : ) expected\n"); ctxt->error = 1; return; @@ -1222,8 +1216,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) { return; SKIP_BLANKS; if (CUR != ',') { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : , expected\n"); ctxt->error = 1; return; @@ -1235,8 +1228,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) { return; SKIP_BLANKS; if (CUR != ')') { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : ) expected\n"); ctxt->error = 1; return; @@ -1253,8 +1245,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) { return; SKIP_BLANKS; if (CUR != ')') { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : ) expected\n"); ctxt->error = 1; return; @@ -1266,8 +1257,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) { NEXT; SKIP_BLANKS; if (CUR != ')') { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : ) expected\n"); ctxt->error = 1; return; @@ -1278,8 +1268,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) { NEXT; SKIP_BLANKS; if (CUR != ')') { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : ) expected\n"); ctxt->error = 1; return; @@ -1290,8 +1279,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) { NEXT; SKIP_BLANKS; if (CUR != ')') { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : ) expected\n"); ctxt->error = 1; return; @@ -1299,14 +1287,12 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) { NEXT; PUSH(XSLT_OP_NODE, NULL, NULL); } else if (aid) { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : expecting 'key' or 'id' or node type\n"); ctxt->error = 1; return; } else { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : node type\n"); ctxt->error = 1; return; @@ -1360,8 +1346,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) { ns = xmlSearchNs(ctxt->doc, ctxt->elem, prefix); if (ns == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileStepPattern : no namespace bound to prefix %s\n", prefix); } else { @@ -1375,8 +1360,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) { PUSH(XSLT_OP_ATTR, NULL, URL); return; } - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileStepPattern : Name expected\n"); ctxt->error = 1; goto error; @@ -1392,8 +1376,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) { PUSH(XSLT_OP_ALL, token, NULL); goto parse_predicate; } else { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileStepPattern : Name expected\n"); ctxt->error = 1; goto error; @@ -1418,8 +1401,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) { token = xsltScanName(ctxt); ns = xmlSearchNs(ctxt->doc, ctxt->elem, prefix); if (ns == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileStepPattern : no namespace bound to prefix %s\n", prefix); ctxt->error = 1; @@ -1433,8 +1415,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) { NEXT; PUSH(XSLT_OP_NS, URL, NULL); } else { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileStepPattern : Name expected\n"); ctxt->error = 1; goto error; @@ -1453,8 +1434,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) { PUSH(XSLT_OP_ALL, token, NULL); goto parse_predicate; } else { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileStepPattern : QName expected\n"); ctxt->error = 1; goto error; @@ -1474,8 +1454,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) { xmlFree(token); token = xsltScanName(ctxt); if (token == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileStepPattern : QName expected\n"); ctxt->error = 1; goto error; @@ -1491,8 +1470,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) { } PUSH(XSLT_OP_ATTR, name, URL); } else { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileStepPattern : 'child' or 'attribute' expected\n"); ctxt->error = 1; goto error; @@ -1542,8 +1520,7 @@ parse_predicate: NEXT; } if (CUR == 0) { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileStepPattern : ']' expected\n"); ctxt->error = 1; goto error; @@ -1647,8 +1624,7 @@ xsltCompileLocationPathPattern(xsltParserContextPtr ctxt) { xmlChar *name; name = xsltScanName(ctxt); if (name == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCompileLocationPathPattern : Name expected\n"); ctxt->error = 1; return; @@ -1701,8 +1677,7 @@ xsltCompilePattern(const xmlChar *pattern, xmlDocPtr doc, int current, start, end, level, j; if (pattern == NULL) { - xsltPrintErrorContext(NULL, NULL, node); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, node, "xsltCompilePattern : NULL pattern\n"); return(NULL); } @@ -1736,8 +1711,7 @@ xsltCompilePattern(const xmlChar *pattern, xmlDocPtr doc, end++; } if (current == end) { - xsltPrintErrorContext(NULL, NULL, node); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, node, "xsltCompilePattern : NULL pattern\n"); goto error; } @@ -1773,8 +1747,7 @@ xsltCompilePattern(const xmlChar *pattern, xmlDocPtr doc, #endif xsltCompileLocationPathPattern(ctxt); if (ctxt->error) { - xsltPrintErrorContext(NULL, style, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, node, "xsltCompilePattern : failed to compile '%s'\n", element->pattern); style->errors++; @@ -1836,8 +1809,7 @@ xsltCompilePattern(const xmlChar *pattern, xmlDocPtr doc, current = end; } if (end == 0) { - xsltPrintErrorContext(NULL, NULL, node); /* TODO */ - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, node, "xsltCompilePattern : NULL pattern\n"); style->errors++; goto error; @@ -1925,8 +1897,7 @@ xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur, break; case XSLT_OP_END: case XSLT_OP_PREDICATE: - xsltPrintErrorContext(NULL, style, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, NULL, "xsltAddTemplate: invalid compiled pattern\n"); xsltFreeCompMatch(pat); return(-1); @@ -2007,8 +1978,7 @@ xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur, list->next = pat; } } else { - xsltPrintErrorContext(NULL, style, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, NULL, "xsltAddTemplate: invalid compiled pattern\n"); xsltFreeCompMatch(pat); return(-1); diff --git a/libxslt/preproc.c b/libxslt/preproc.c index a52f193..9149af8 100644 --- a/libxslt/preproc.c +++ b/libxslt/preproc.c @@ -66,8 +66,7 @@ xsltNewStylePreComp(xsltStylesheetPtr style, xsltStyleType type) { cur = (xsltStylePreCompPtr) xmlMalloc(sizeof(xsltStylePreComp)); if (cur == NULL) { - xsltPrintErrorContext(NULL, style, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, NULL, "xsltNewStylePreComp : malloc failed\n"); style->errors++; return(NULL); @@ -121,8 +120,7 @@ xsltNewStylePreComp(xsltStylesheetPtr style, xsltStyleType type) { cur->func = NULL;break; default: if (cur->func == NULL) { - xsltPrintErrorContext(NULL, style, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, NULL, "xsltNewStylePreComp : no function for type %d\n", type); style->errors++; } @@ -257,8 +255,7 @@ xsltDocumentComp(xsltStylesheetPtr style, xmlNodePtr inst, base = xmlNodeGetBase(inst->doc, inst); URL = xmlBuildURI(filename, base); if (URL == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsltDocumentComp: URL computation failed %s\n", filename); style->warnings++; comp->filename = xmlStrdup(filename); @@ -313,8 +310,7 @@ xsltSortComp(xsltStylesheetPtr style, xmlNodePtr inst) { else if (xmlStrEqual(comp->stype, (const xmlChar *) "number")) comp->number = 1; else { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsltSortComp: no support for data-type = %s\n", comp->stype); comp->number = 0; /* use default */ style->warnings++; @@ -329,8 +325,7 @@ xsltSortComp(xsltStylesheetPtr style, xmlNodePtr inst) { else if (xmlStrEqual(comp->order, (const xmlChar *) "descending")) comp->descending = 1; else { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsltSortComp: invalid value %s for order\n", comp->order); comp->descending = 0; /* use default */ style->warnings++; @@ -350,8 +345,7 @@ xsltSortComp(xsltStylesheetPtr style, xmlNodePtr inst) { } comp->comp = xmlXPathCompile(comp->select); if (comp->comp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsltSortComp: could not compile select expression '%s'\n", comp->select); style->errors++; @@ -416,8 +410,7 @@ xsltTextComp(xsltStylesheetPtr style, xmlNodePtr inst) { comp->noescape = 1; } else if (!xmlStrEqual(prop, (const xmlChar *)"no")){ - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:text: disable-output-escaping allows only yes or no\n"); style->warnings++; } @@ -564,16 +557,14 @@ xsltCopyOfComp(xsltStylesheetPtr style, xmlNodePtr inst) { comp->select = xsltGetNsProp(inst, (const xmlChar *)"select", XSLT_NAMESPACE); if (comp->select == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:copy-of : select is missing\n"); style->errors++; return; } comp->comp = xmlXPathCompile(comp->select); if (comp->comp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:copy-of : could not compile select expression '%s'\n", comp->select); style->errors++; @@ -608,8 +599,7 @@ xsltValueOfComp(xsltStylesheetPtr style, xmlNodePtr inst) { comp->noescape = 1; } else if (!xmlStrEqual(prop, (const xmlChar *)"no")){ - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:value-of : disable-output-escaping allows only yes or no\n"); style->warnings++; } @@ -618,16 +608,14 @@ xsltValueOfComp(xsltStylesheetPtr style, xmlNodePtr inst) { comp->select = xsltGetNsProp(inst, (const xmlChar *)"select", XSLT_NAMESPACE); if (comp->select == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:value-of : select is missing\n"); style->errors++; return; } comp->comp = xmlXPathCompile(comp->select); if (comp->comp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:value-of : could not compile select expression '%s'\n", comp->select); style->errors++; @@ -659,8 +647,7 @@ xsltWithParamComp(xsltStylesheetPtr style, xmlNodePtr inst) { */ prop = xsltGetNsProp(inst, (const xmlChar *)"name", XSLT_NAMESPACE); if (prop == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:with-param : name is missing\n"); style->errors++; } else { @@ -686,15 +673,13 @@ xsltWithParamComp(xsltStylesheetPtr style, xmlNodePtr inst) { if (comp->select != NULL) { comp->comp = xmlXPathCompile(comp->select); if (comp->comp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:param : could not compile select expression '%s'\n", comp->select); style->errors++; } if (inst->children != NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:param : content should be empty since select is present \n"); style->warnings++; } @@ -749,8 +734,7 @@ xsltNumberComp(xsltStylesheetPtr style, xmlNodePtr cur) { xmlStrEqual(prop, BAD_CAST("any"))) { comp->numdata.level = prop; } else { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:number : invalid value %s for level\n", prop); style->warnings++; xmlFree(prop); @@ -766,20 +750,17 @@ xsltNumberComp(xsltStylesheetPtr style, xmlNodePtr cur) { prop = xsltGetNsProp(cur, (const xmlChar *)"letter-value", XSLT_NAMESPACE); if (prop != NULL) { if (xmlStrEqual(prop, BAD_CAST("alphabetic"))) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:number : letter-value 'alphabetic' not implemented\n"); style->warnings++; XSLT_TODO; /* xsl:number letter-value attribute alphabetic */ } else if (xmlStrEqual(prop, BAD_CAST("traditional"))) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:number : letter-value 'traditional' not implemented\n"); style->warnings++; XSLT_TODO; /* xsl:number letter-value attribute traditional */ } else { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:number : invalid value %s for letter-value\n", prop); style->warnings++; } @@ -855,8 +836,7 @@ xsltCallTemplateComp(xsltStylesheetPtr style, xmlNodePtr inst) { */ prop = xsltGetNsProp(inst, (const xmlChar *)"name", XSLT_NAMESPACE); if (prop == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:call-template : name is missing\n"); style->errors++; } else { @@ -923,8 +903,7 @@ xsltApplyTemplatesComp(xsltStylesheetPtr style, xmlNodePtr inst) { if (comp->select != NULL) { comp->comp = xmlXPathCompile(comp->select); if (comp->comp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:apply-templates : could not compile select expression '%s'\n", comp->select); style->errors++; @@ -975,16 +954,14 @@ xsltIfComp(xsltStylesheetPtr style, xmlNodePtr inst) { comp->test = xsltGetNsProp(inst, (const xmlChar *)"test", XSLT_NAMESPACE); if (comp->test == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:if : test is not defined\n"); style->errors++; return; } comp->comp = xmlXPathCompile(comp->test); if (comp->comp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:if : could not compile test expression '%s'\n", comp->test); style->errors++; @@ -1012,16 +989,14 @@ xsltWhenComp(xsltStylesheetPtr style, xmlNodePtr inst) { comp->test = xsltGetNsProp(inst, (const xmlChar *)"test", XSLT_NAMESPACE); if (comp->test == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:when : test is not defined\n"); style->errors++; return; } comp->comp = xmlXPathCompile(comp->test); if (comp->comp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:when : could not compile test expression '%s'\n", comp->test); style->errors++; @@ -1050,15 +1025,13 @@ xsltForEachComp(xsltStylesheetPtr style, xmlNodePtr inst) { comp->select = xsltGetNsProp(inst, (const xmlChar *)"select", XSLT_NAMESPACE); if (comp->select == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:for-each : select is missing\n"); style->errors++; } else { comp->comp = xmlXPathCompile(comp->select); if (comp->comp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:for-each : could not compile select expression '%s'\n", comp->select); style->errors++; @@ -1092,8 +1065,7 @@ xsltVariableComp(xsltStylesheetPtr style, xmlNodePtr inst) { */ prop = xsltGetNsProp(inst, (const xmlChar *)"name", XSLT_NAMESPACE); if (prop == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:variable : name is missing\n"); style->errors++; } else { @@ -1119,15 +1091,13 @@ xsltVariableComp(xsltStylesheetPtr style, xmlNodePtr inst) { if (comp->select != NULL) { comp->comp = xmlXPathCompile(comp->select); if (comp->comp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:variable : could not compile select expression '%s'\n", comp->select); style->errors++; } if (inst->children != NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:variable : content should be empty since select is present \n"); style->warnings++; } @@ -1159,8 +1129,7 @@ xsltParamComp(xsltStylesheetPtr style, xmlNodePtr inst) { */ prop = xsltGetNsProp(inst, (const xmlChar *)"name", XSLT_NAMESPACE); if (prop == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:param : name is missing\n"); style->errors++; } else { @@ -1186,15 +1155,13 @@ xsltParamComp(xsltStylesheetPtr style, xmlNodePtr inst) { if (comp->select != NULL) { comp->comp = xmlXPathCompile(comp->select); if (comp->comp == NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:param : could not compile select expression '%s'\n", comp->select); style->errors++; } if (inst->children != NULL) { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsl:param : content should be empty since select is present \n"); style->warnings++; } @@ -1334,8 +1301,7 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr inst) { inst->_private = (void *) xsltDocumentComp(style, inst, (xsltTransformFunction) xsltDocumentElem); } else { - xsltPrintErrorContext(NULL, style, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, inst, "xsltStylePreCompute: unknown xsl:%s\n", inst->name); style->warnings++; } diff --git a/libxslt/security.c b/libxslt/security.c index 8b4422c..31b4068 100644 --- a/libxslt/security.c +++ b/libxslt/security.c @@ -72,8 +72,7 @@ xsltNewSecurityPrefs(void) { ret = (xsltSecurityPrefsPtr) xmlMalloc(sizeof(xsltSecurityPrefs)); if (ret == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewSecurityPrefs : malloc failed\n"); return(NULL); } @@ -290,8 +289,7 @@ xsltCheckWrite(xsltSecurityPrefsPtr sec, uri = xmlParseURI((const char *)URL); if (uri == NULL) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "xsltDocumentElem: URL parsing failed for %s\n", URL); return(-1); @@ -307,8 +305,7 @@ xsltCheckWrite(xsltSecurityPrefsPtr sec, if (check != NULL) { ret = check(sec, ctxt, uri->path); if (ret == 0) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "File write for %s refused\n", URL); xmlFreeURI(uri); return(0); @@ -327,8 +324,7 @@ xsltCheckWrite(xsltSecurityPrefsPtr sec, if (check != NULL) { ret = check(sec, ctxt, directory); if (ret == 0) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "Directory creation for %s refused\n", URL); xmlFree(directory); @@ -352,8 +348,7 @@ xsltCheckWrite(xsltSecurityPrefsPtr sec, if (check != NULL) { ret = check(sec, ctxt, uri->path); if (ret == 0) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "File write for %s refused\n", URL); xmlFreeURI(uri); return(0); @@ -384,8 +379,7 @@ xsltCheckRead(xsltSecurityPrefsPtr sec, uri = xmlParseURI((const char *)URL); if (uri == NULL) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "xsltCheckRead: URL parsing failed for %s\n", URL); return(-1); @@ -400,8 +394,7 @@ xsltCheckRead(xsltSecurityPrefsPtr sec, if (check != NULL) { ret = check(sec, ctxt, uri->path); if (ret == 0) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "Local file read for %s refused\n", URL); xmlFreeURI(uri); return(0); @@ -415,8 +408,7 @@ xsltCheckRead(xsltSecurityPrefsPtr sec, if (check != NULL) { ret = check(sec, ctxt, uri->path); if (ret == 0) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "Network file read for %s refused\n", URL); xmlFreeURI(uri); return(0); diff --git a/libxslt/templates.c b/libxslt/templates.c index d4a65e3..ef24e54 100644 --- a/libxslt/templates.c +++ b/libxslt/templates.c @@ -142,8 +142,7 @@ xsltEvalXPathStringNs(xsltTransformContextPtr ctxt, xmlXPathCompExprPtr comp, ret = res->stringval; res->stringval = NULL; } else { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "xpath : string() function didn't return a String\n"); } xmlXPathFreeObject(res); diff --git a/libxslt/templates.h b/libxslt/templates.h index 07510e2..c92d1c5 100644 --- a/libxslt/templates.h +++ b/libxslt/templates.h @@ -37,6 +37,10 @@ xmlChar * xsltEvalStaticAttrValueTemplate (xsltStylesheetPtr style, /* TODO: this is obviously broken ... the namespaces should be passed too ! */ xmlChar * xsltEvalXPathString (xsltTransformContextPtr ctxt, xmlXPathCompExprPtr comp); +xmlChar * xsltEvalXPathStringNs (xsltTransformContextPtr ctxt, + xmlXPathCompExprPtr comp, + int nsNr, + xmlNsPtr *nsList); xmlNodePtr * xsltTemplateProcess (xsltTransformContextPtr ctxt, xmlNodePtr node); @@ -48,6 +52,9 @@ xmlAttrPtr xsltAttrTemplateProcess (xsltTransformContextPtr ctxt, xmlAttrPtr attr); xmlChar * xsltAttrTemplateValueProcess (xsltTransformContextPtr ctxt, const xmlChar* attr); +xmlChar * xsltAttrTemplateValueProcessNode(xsltTransformContextPtr ctxt, + const xmlChar* str, + xmlNodePtr node); #ifdef __cplusplus } #endif diff --git a/libxslt/transform.c b/libxslt/transform.c index 1c4cbd0..5ff5944 100644 --- a/libxslt/transform.c +++ b/libxslt/transform.c @@ -181,8 +181,7 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) { cur = (xsltTransformContextPtr) xmlMalloc(sizeof(xsltTransformContext)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, (xmlNodePtr)doc); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, (xmlNodePtr)doc, "xsltNewTransformContext : malloc failed\n"); return(NULL); } @@ -194,8 +193,7 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) { cur->templTab = (xsltTemplatePtr *) xmlMalloc(10 * sizeof(xsltTemplatePtr)); if (cur->templTab == NULL) { - xsltPrintErrorContext(NULL, NULL, (xmlNodePtr) doc); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, (xmlNodePtr) doc, "xsltNewTransformContext: out of memory\n"); xmlFree(cur); return(NULL); @@ -233,8 +231,7 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) { xmlXPathInit(); cur->xpathCtxt = xmlXPathNewContext(doc); if (cur->xpathCtxt == NULL) { - xsltPrintErrorContext(NULL, NULL, (xmlNodePtr) doc); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, (xmlNodePtr) doc, "xsltNewTransformContext : xmlXPathNewContext failed\n"); xmlFree(cur->templTab); xmlFree(cur->varsTab); @@ -278,8 +275,7 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) { cur->xpathCtxt->nsHash = style->nsHash; docu = xsltNewDocument(cur, doc); if (docu == NULL) { - xsltPrintErrorContext(cur, NULL, (xmlNodePtr)doc); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(cur, NULL, (xmlNodePtr)doc, "xsltNewTransformContext : xsltNewDocument failed\n"); xmlFree(cur->templTab); xmlFree(cur->varsTab); @@ -401,8 +397,7 @@ xsltCopyTextString(xsltTransformContextPtr ctxt, xmlNodePtr target, if (target != NULL) xmlAddChild(target, copy); } else { - xsltPrintErrorContext(ctxt, NULL, target); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, target, "xsltCopyTextString: text copy failed\n"); } return(copy); @@ -470,8 +465,7 @@ xsltCopyText(xsltTransformContextPtr ctxt, xmlNodePtr target, if (target != NULL) xmlAddChild(target, copy); } else { - xsltPrintErrorContext(ctxt, NULL, target); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, target, "xsltCopyText: text copy failed\n"); } return(copy); @@ -588,8 +582,7 @@ xsltCopyNode(xsltTransformContextPtr ctxt, xmlNodePtr node, copy->ns = xsltGetNamespace(ctxt, node, node->ns, copy); } } else { - xsltPrintErrorContext(ctxt, NULL, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, node, "xsltCopyNode: copy %s failed\n", node->name); } return(copy); @@ -707,8 +700,7 @@ xsltCopyTree(xsltTransformContextPtr ctxt, xmlNodePtr node, if (node->children != NULL) xsltCopyTreeList(ctxt, node->children, copy); } else { - xsltPrintErrorContext(ctxt, NULL, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, node, "xsltCopyTree: copy %s failed\n", node->name); } return(copy); @@ -813,8 +805,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) { if (copy != NULL) { xmlAddChild(ctxt->insert, copy); } else { - xsltPrintErrorContext(ctxt, NULL, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, node, "xsltDefaultProcessOneNode: cdata copy failed\n"); } return; @@ -832,8 +823,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) { if (copy != NULL) { xmlAddChild(ctxt->insert, copy); } else { - xsltPrintErrorContext(ctxt, NULL, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, node, "xsltDefaultProcessOneNode: text copy failed\n"); } return; @@ -842,8 +832,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) { while ((cur != NULL) && (cur->type != XML_TEXT_NODE)) cur = cur->next; if (cur == NULL) { - xsltPrintErrorContext(ctxt, NULL, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, node, "xsltDefaultProcessOneNode: no text for attribute\n"); } else { #ifdef WITH_XSLT_DEBUG_PROCESS @@ -859,8 +848,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) { if (copy != NULL) { xmlAddChild(ctxt->insert, copy); } else { - xsltPrintErrorContext(ctxt, NULL, node); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, node, "xsltDefaultProcessOneNode: text copy failed\n"); } } @@ -966,8 +954,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) { if (copy != NULL) { xmlAddChild(ctxt->insert, copy); } else { - xsltPrintErrorContext(ctxt, NULL, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, cur, "xsltDefaultProcessOneNode: cdata copy failed\n"); } } @@ -998,8 +985,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) { if (copy != NULL) { xmlAddChild(ctxt->insert, copy); } else { - xsltPrintErrorContext(ctxt, NULL, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, cur, "xsltDefaultProcessOneNode: text copy failed\n"); } } @@ -1172,8 +1158,7 @@ xsltApplyOneTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node, CHECK_STOPPED; if (ctxt->templNr >= xsltMaxDepth) { - xsltPrintErrorContext(ctxt, NULL, list); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, list, "xsltApplyOneTemplate: loop found ???\n"); xsltGenericError(xsltGenericErrorContext, "try increasing xsltMaxDepth (--maxdepth)\n"); @@ -1348,8 +1333,7 @@ xsltApplyOneTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node, } if (!found) { - xsltPrintErrorContext(ctxt, NULL, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, cur, "xsltApplyOneTemplate: failed to find extension %s\n", cur->name); } @@ -1609,8 +1593,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, } if (URL == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltDocumentElem: href/URI-Reference not found\n"); return; } @@ -1630,8 +1613,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, } if (filename == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltDocumentElem: URL computation failed for %s\n", URL); xmlFree(URL); @@ -1644,8 +1626,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, if (ctxt->sec != NULL) { ret = xsltCheckWrite(ctxt->sec, ctxt, filename); if (ret == 0) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltDocumentElem: write rights for %s denied\n", filename); xmlFree(URL); @@ -1662,8 +1643,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, style = xsltNewStylesheet(); if (style == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltDocumentElem: out of memory\n"); goto error; } @@ -1710,8 +1690,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, (xmlStrEqual(prop, (const xmlChar *) "text"))) { style->method = prop; } else { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "invalid value for method: %s\n", prop); style->warnings++; } @@ -1745,8 +1724,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, } else if (xmlStrEqual(prop, (const xmlChar *) "no")) { style->standalone = 0; } else { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "invalid value for standalone: %s\n", prop); style->warnings++; @@ -1763,8 +1741,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, } else if (xmlStrEqual(prop, (const xmlChar *) "no")) { style->indent = 0; } else { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "invalid value for indent: %s\n", prop); style->warnings++; } @@ -1781,8 +1758,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, } else if (xmlStrEqual(prop, (const xmlChar *) "no")) { style->omitXmlDeclaration = 0; } else { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "invalid value for omit-xml-declaration: %s\n", prop); style->warnings++; @@ -1854,8 +1830,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, if (res == NULL) goto error; } else if (xmlStrEqual(method, (const xmlChar *) "xhtml")) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltDocumentElem: unsupported method xhtml, using html\n", style->method); ctxt->type = XSLT_OUTPUT_HTML; @@ -1868,8 +1843,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, if (res == NULL) goto error; } else { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltDocumentElem: unsupported method %s\n", style->method); goto error; @@ -1945,8 +1919,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, ret = xsltSaveResultToFilename((const char *) filename, res, style, 0); if (ret < 0) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltDocumentElem: unable to save to %s\n", filename); ctxt->state = XSLT_STATE_ERROR; @@ -1996,13 +1969,11 @@ xsltSort(xsltTransformContextPtr ctxt, xmlNodePtr node ATTRIBUTE_UNUSED, xmlNodePtr inst, xsltStylePreCompPtr comp) { if (comp == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:sort : compilation failed\n"); return; } - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:sort : improper use this should not be reached\n"); } @@ -2162,8 +2133,7 @@ xsltText(xsltTransformContextPtr ctxt, xmlNodePtr node ATTRIBUTE_UNUSED, while (text != NULL) { if ((text->type != XML_TEXT_NODE) && (text->type != XML_CDATA_SECTION_NODE)) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:text content problem\n"); break; } @@ -2218,8 +2188,7 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node, prop = xsltEvalAttrValueTemplate(ctxt, inst, (const xmlChar *)"name", XSLT_NAMESPACE); if (prop == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:element : name is missing\n"); goto error; } @@ -2259,8 +2228,7 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node, } oldns = xmlSearchNs(inst->doc, inst, prefix); if (oldns == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:element : no namespace bound to prefix %s\n", prefix); } else { ns = xsltGetNamespace(ctxt, inst, ns, ctxt->insert); @@ -2269,8 +2237,7 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node, copy = xmlNewDocNode(ctxt->output, ns, name, NULL); if (copy == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:element : creation of %s failed\n", name); goto error; } @@ -2372,8 +2339,7 @@ xsltProcessingInstruction(xsltTransformContextPtr ctxt, xmlNodePtr node, ncname = xsltEvalAttrValueTemplate(ctxt, inst, (const xmlChar *)"name", XSLT_NAMESPACE); if (ncname == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:processing-instruction : name is missing\n"); goto error; } @@ -2427,8 +2393,7 @@ xsltCopyOf(xsltTransformContextPtr ctxt, xmlNodePtr node, if ((ctxt == NULL) || (node == NULL) || (inst == NULL)) return; if ((comp == NULL) || (comp->select == NULL) || (comp->comp == NULL)) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:copy-of : compilation failed\n"); return; } @@ -2529,8 +2494,7 @@ xsltValueOf(xsltTransformContextPtr ctxt, xmlNodePtr node, if ((ctxt == NULL) || (node == NULL) || (inst == NULL)) return; if ((comp == NULL) || (comp->select == NULL) || (comp->comp == NULL)) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:value-of : compilation failed\n"); return; } @@ -2564,8 +2528,7 @@ xsltValueOf(xsltTransformContextPtr ctxt, xmlNodePtr node, } if (copy == NULL) { if ((res == NULL) || (res->stringval != NULL)) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsltValueOf: text copy failed\n"); } } @@ -2592,8 +2555,7 @@ xsltNumber(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp) { if (comp == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:number : compilation failed\n"); return; } @@ -2623,8 +2585,7 @@ xsltApplyImports(xsltTransformContextPtr ctxt, xmlNodePtr node, xsltTemplatePtr template; if ((ctxt->templ == NULL) || (ctxt->templ->style == NULL)) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:apply-imports : internal error no current template\n"); return; } @@ -2652,8 +2613,7 @@ xsltCallTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node, if (ctxt->insert == NULL) return; if (comp == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:call-template : compilation failed\n"); return; } @@ -2664,8 +2624,7 @@ xsltCallTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node, if (comp->templ == NULL) { comp->templ = xsltFindTemplate(ctxt, comp->name, comp->ns); if (comp->templ == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:call-template : template %s not found\n", comp->name); return; } @@ -2741,8 +2700,7 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNsPtr *oldNamespaces; if (comp == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:apply-templates : compilation failed\n"); return; } @@ -2779,8 +2737,7 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node, if (comp->select != NULL) { if (comp->comp == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:apply-templates : compilation failed\n"); goto error; } @@ -2940,8 +2897,7 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node, ctxt->xpathCtxt->doc=list->nodeTab[i]->doc->doc; if ((ctxt->document = xsltFindDocument(ctxt,list->nodeTab[i]->doc->doc))==NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:apply-templates : can't find doc\n"); goto error; } @@ -3006,15 +2962,13 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr node, */ replacement = inst->children; if (replacement == NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:choose: empty content not allowed\n"); goto error; } if ((!IS_XSLT_ELEM(replacement)) || (!IS_XSLT_NAME(replacement, "when"))) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:choose: xsl:when expected first\n"); goto error; } @@ -3022,8 +2976,7 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr node, xsltStylePreCompPtr wcomp = replacement->_private; if ((wcomp == NULL) || (wcomp->test == NULL) || (wcomp->comp == NULL)) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:choose: compilation failed !\n"); goto error; } @@ -3100,8 +3053,7 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr node, replacement = replacement->next; } if (replacement != NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:choose: unexpected content %s\n", replacement->name); goto error; } @@ -3135,8 +3087,7 @@ xsltIf(xsltTransformContextPtr ctxt, xmlNodePtr node, if ((ctxt == NULL) || (node == NULL) || (inst == NULL)) return; if ((comp == NULL) || (comp->test == NULL) || (comp->comp == NULL)) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:if : compilation failed\n"); return; } @@ -3214,8 +3165,7 @@ xsltForEach(xsltTransformContextPtr ctxt, xmlNodePtr node, if ((ctxt == NULL) || (node == NULL) || (inst == NULL)) return; if ((comp == NULL) || (comp->select == NULL) || (comp->comp == NULL)) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:for-each : compilation failed\n"); return; } @@ -3299,8 +3249,7 @@ xsltForEach(xsltTransformContextPtr ctxt, xmlNodePtr node, ctxt->xpathCtxt->doc=list->nodeTab[i]->doc->doc; if ((ctxt->document = xsltFindDocument(ctxt,list->nodeTab[i]->doc->doc))==NULL) { - xsltPrintErrorContext(ctxt, NULL, inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, inst, "xsl:for-each : can't find doc\n"); goto error; } @@ -3569,8 +3518,7 @@ xsltApplyStylesheetInternal(xsltStylesheetPtr style, xmlDocPtr doc, if (res == NULL) goto error; } else if (xmlStrEqual(method, (const xmlChar *) "xhtml")) { - xsltPrintErrorContext(ctxt, NULL, (xmlNodePtr) doc); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, (xmlNodePtr) doc, "xsltApplyStylesheetInternal: unsupported method xhtml, using html\n", style->method); ctxt->type = XSLT_OUTPUT_HTML; @@ -3583,8 +3531,7 @@ xsltApplyStylesheetInternal(xsltStylesheetPtr style, xmlDocPtr doc, if (res == NULL) goto error; } else { - xsltPrintErrorContext(ctxt, NULL, (xmlNodePtr) doc); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, (xmlNodePtr) doc, "xsltApplyStylesheetInternal: unsupported method %s\n", style->method); goto error; @@ -3843,8 +3790,7 @@ xsltRunStylesheetUser(xsltStylesheetPtr style, xmlDocPtr doc, tmp = xsltApplyStylesheetInternal(style, doc, params, output, profile, userCtxt); if (tmp == NULL) { - xsltPrintErrorContext(NULL, NULL, (xmlNodePtr) doc); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, (xmlNodePtr) doc, "xsltRunStylesheet : run failed\n"); return (-1); } diff --git a/libxslt/variables.c b/libxslt/variables.c index 181590f..61f5d3e 100644 --- a/libxslt/variables.c +++ b/libxslt/variables.c @@ -53,8 +53,7 @@ xsltNewStackElem(void) { cur = (xsltStackElemPtr) xmlMalloc(sizeof(xsltStackElem)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewStackElem : malloc failed\n"); return(NULL); } @@ -82,8 +81,7 @@ xsltCopyStackElem(xsltStackElemPtr elem) { cur = (xsltStackElemPtr) xmlMalloc(sizeof(xsltStackElem)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltCopyStackElem : malloc failed\n"); return(NULL); } @@ -335,8 +333,7 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr elem, if ((precomp == NULL) || (precomp->comp == NULL)) xmlXPathFreeCompExpr(comp); if (result == NULL) { - xsltPrintErrorContext(ctxt, NULL, precomp->inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, precomp->inst, "Evaluating variable %s failed\n", elem->name); ctxt->state = XSLT_STATE_STOPPED; #ifdef WITH_XSLT_DEBUG_VARIABLE @@ -466,8 +463,7 @@ xsltEvalGlobalVariable(xsltStackElemPtr elem, xsltTransformContextPtr ctxt) { if ((precomp == NULL) || (precomp->comp == NULL)) xmlXPathFreeCompExpr(comp); if (result == NULL) { - xsltPrintErrorContext(ctxt, NULL, precomp->inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, precomp->inst, "Evaluating global variable %s failed\n", elem->name); ctxt->state = XSLT_STATE_STOPPED; #ifdef WITH_XSLT_DEBUG_VARIABLE @@ -595,8 +591,7 @@ xsltEvalGlobalVariables(xsltTransformContextPtr ctxt) { if ((elem->comp->inst != NULL) && (def->comp != NULL) && (def->comp->inst != NULL) && (elem->comp->inst->doc == def->comp->inst->doc)) { - xsltPrintErrorContext(ctxt, style, elem->comp->inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, style, elem->comp->inst, "Global variable %s already defined\n", elem->name); } } @@ -759,8 +754,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt, ns = xmlSearchNs(style->doc, xmlDocGetRootElement(style->doc), prefix); if (ns == NULL) { - xsltPrintErrorContext(ctxt, style, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, style, NULL, "user param : no namespace bound to prefix %s\n", prefix); href = NULL; } else { @@ -810,8 +804,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt, xmlXPathFreeCompExpr(comp); } if (result == NULL) { - xsltPrintErrorContext(ctxt, style, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, style, NULL, "Evaluating user parameter %s failed\n", name); ctxt->state = XSLT_STATE_STOPPED; xmlFree(ncname); @@ -865,8 +858,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt, res = xmlHashAddEntry2(ctxt->globalVars, ncname, href, elem); if (res != 0) { xsltFreeStackElem(elem); - xsltPrintErrorContext(ctxt, style, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, style, NULL, "Global parameter %s already defined\n", ncname); } xmlFree(ncname); @@ -1046,8 +1038,7 @@ xsltRegisterVariable(xsltTransformContextPtr ctxt, xsltStylePreCompPtr comp, if (xsltCheckStackElem(ctxt, comp->name, comp->ns) != 0) { if (!param) { - xsltPrintErrorContext(ctxt, NULL, comp->inst); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, comp->inst, "xsl:variable : redefining %s\n", comp->name); } #ifdef WITH_XSLT_DEBUG_VARIABLE @@ -1161,15 +1152,13 @@ xsltParseStylesheetCallerParam(xsltTransformContextPtr ctxt, xmlNodePtr cur) { return(NULL); comp = (xsltStylePreCompPtr) cur->_private; if (comp == NULL) { - xsltPrintErrorContext(ctxt, NULL, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, cur, "xsl:param : compilation error\n"); return(NULL); } if (comp->name == NULL) { - xsltPrintErrorContext(ctxt, NULL, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, cur, "xsl:param : missing name attribute\n"); return(NULL); } @@ -1213,15 +1202,13 @@ xsltParseGlobalVariable(xsltStylesheetPtr style, xmlNodePtr cur) { xsltStylePreCompute(style, cur); comp = (xsltStylePreCompPtr) cur->_private; if (comp == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:variable : compilation failed\n"); return; } if (comp->name == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:variable : missing name attribute\n"); return; } @@ -1254,15 +1241,13 @@ xsltParseGlobalParam(xsltStylesheetPtr style, xmlNodePtr cur) { xsltStylePreCompute(style, cur); comp = (xsltStylePreCompPtr) cur->_private; if (comp == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:param : compilation failed\n"); return; } if (comp->name == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:param : missing name attribute\n"); return; } @@ -1294,15 +1279,13 @@ xsltParseStylesheetVariable(xsltTransformContextPtr ctxt, xmlNodePtr cur) { comp = (xsltStylePreCompPtr) cur->_private; if (comp == NULL) { - xsltPrintErrorContext(ctxt, NULL, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, cur, "xsl:variable : compilation failed\n"); return; } if (comp->name == NULL) { - xsltPrintErrorContext(ctxt, NULL, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, cur, "xsl:variable : missing name attribute\n"); return; } @@ -1333,15 +1316,13 @@ xsltParseStylesheetParam(xsltTransformContextPtr ctxt, xmlNodePtr cur) { comp = (xsltStylePreCompPtr) cur->_private; if (comp == NULL) { - xsltPrintErrorContext(ctxt, NULL, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, cur, "xsl:param : compilation failed\n"); return; } if (comp->name == NULL) { - xsltPrintErrorContext(ctxt, NULL, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, cur, "xsl:param : missing name attribute\n"); return; } @@ -1394,8 +1375,7 @@ xsltXPathVariableLookup(void *ctxt, const xmlChar *name, context = (xsltTransformContextPtr) ctxt; ret = xsltVariableLookup(context, name, ns_uri); if (ret == NULL) { - xsltPrintErrorContext(ctxt, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, NULL, "unregistered variable %s\n", name); } #ifdef WITH_XSLT_DEBUG_VARIABLE diff --git a/libxslt/xslt.c b/libxslt/xslt.c index 0411b33..a296c94 100644 --- a/libxslt/xslt.c +++ b/libxslt/xslt.c @@ -272,8 +272,7 @@ xsltNewTemplate(void) { cur = (xsltTemplatePtr) xmlMalloc(sizeof(xsltTemplate)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewTemplate : malloc failed\n"); return(NULL); } @@ -332,8 +331,7 @@ xsltNewStylesheet(void) { cur = (xsltStylesheetPtr) xmlMalloc(sizeof(xsltStylesheet)); if (cur == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltNewStylesheet : malloc failed\n"); return(NULL); } @@ -645,8 +643,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur) (xmlStrEqual(prop, (const xmlChar *) "text"))) { style->method = prop; } else { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "invalid value for method: %s\n", prop); style->warnings++; } @@ -682,8 +679,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur) } else if (xmlStrEqual(prop, (const xmlChar *) "no")) { style->standalone = 0; } else { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "invalid value for standalone: %s\n", prop); style->warnings++; } @@ -697,8 +693,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur) } else if (xmlStrEqual(prop, (const xmlChar *) "no")) { style->indent = 0; } else { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "invalid value for indent: %s\n", prop); style->warnings++; } @@ -713,8 +708,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur) } else if (xmlStrEqual(prop, (const xmlChar *) "no")) { style->omitXmlDeclaration = 0; } else { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "invalid value for omit-xml-declaration: %s\n", prop); style->warnings++; @@ -795,16 +789,14 @@ xsltParseStylesheetDecimalFormat(xsltStylesheetPtr style, xmlNodePtr cur) if (prop != NULL) { format = xsltDecimalFormatGetByName(style, prop); if (format != NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsltParseStylestyleDecimalFormat: %s already exists\n", prop); style->warnings++; return; } format = xsltNewDecimalFormat(prop); if (format == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsltParseStylestyleDecimalFormat: failed creating new decimal-format\n"); style->errors++; return; @@ -899,8 +891,7 @@ xsltParseStylesheetPreserveSpace(xsltStylesheetPtr style, xmlNodePtr cur) { elements = xsltGetNsProp(cur, (const xmlChar *)"elements", XSLT_NAMESPACE); if (elements == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsltParseStylesheetPreserveSpace: missing elements attribute\n"); style->warnings++; return; @@ -980,8 +971,7 @@ xsltParseStylesheetExtPrefix(xsltStylesheetPtr style, xmlNodePtr cur) { else ns = xmlSearchNs(style->doc, cur, prefix); if (ns == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:extension-element-prefix : undefined namespace %s\n", prefix); style->warnings++; @@ -1018,8 +1008,7 @@ xsltParseStylesheetStripSpace(xsltStylesheetPtr style, xmlNodePtr cur) { elements = xsltGetNsProp(cur, (const xmlChar *)"elements", XSLT_NAMESPACE); if (elements == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsltParseStylesheetStripSpace: missing elements attribute\n"); style->warnings++; return; @@ -1102,8 +1091,7 @@ xsltParseStylesheetExcludePrefix(xsltStylesheetPtr style, xmlNodePtr cur) { else ns = xmlSearchNs(style->doc, cur, prefix); if (ns == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:exclude-result-prefixes : undefined namespace %s\n", prefix); style->warnings++; @@ -1296,8 +1284,7 @@ xsltGatherNamespaces(xsltStylesheetPtr style) { if (style->nsHash == NULL) { style->nsHash = xmlHashCreate(10); if (style->nsHash == NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsltGatherNamespaces: failed to create hash table\n"); style->errors++; return; @@ -1305,8 +1292,7 @@ xsltGatherNamespaces(xsltStylesheetPtr style) { } URI = xmlHashLookup(style->nsHash, ns->prefix); if ((URI != NULL) && (!xmlStrEqual(URI, ns->href))) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "Namespaces prefix %s used for multiple namespaces\n"); style->warnings++; } else if (URI == NULL) { @@ -1402,8 +1388,7 @@ xsltParseTemplateContent(xsltStylesheetPtr style, xmlNodePtr templ) { noesc = 1; } else if (!xmlStrEqual(prop, (const xmlChar *)"no")){ - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsl:text: disable-output-escaping allows only yes or no\n"); style->warnings++; @@ -1414,8 +1399,7 @@ xsltParseTemplateContent(xsltStylesheetPtr style, xmlNodePtr templ) { while (text != NULL) { if ((text->type != XML_TEXT_NODE) && (text->type != XML_CDATA_SECTION_NODE)) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsltParseTemplateContent: xslt:text content problem\n"); style->errors++; break; @@ -1507,8 +1491,7 @@ skip_children: xmlNodePtr param = cur; cur = cur->next; - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsltParseTemplateContent: ignoring misplaced param element\n"); style->warnings++; xmlUnlinkNode(param); @@ -1560,8 +1543,7 @@ xsltParseStylesheetKey(xsltStylesheetPtr style, xmlNodePtr key) { "xsltParseStylesheetKey: name %s\n", name); #endif } else { - xsltPrintErrorContext(NULL, style, key); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, key, "xsl:key : error missing name\n"); style->errors++; goto error; @@ -1569,8 +1551,7 @@ xsltParseStylesheetKey(xsltStylesheetPtr style, xmlNodePtr key) { match = xsltGetNsProp(key, (const xmlChar *)"match", XSLT_NAMESPACE); if (match == NULL) { - xsltPrintErrorContext(NULL, style, key); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, key, "xsl:key : error missing match\n"); style->errors++; goto error; @@ -1578,8 +1559,7 @@ xsltParseStylesheetKey(xsltStylesheetPtr style, xmlNodePtr key) { use = xsltGetNsProp(key, (const xmlChar *)"use", XSLT_NAMESPACE); if (use == NULL) { - xsltPrintErrorContext(NULL, style, key); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, key, "xsl:key : error missing use\n"); style->errors++; goto error; @@ -1737,15 +1717,13 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) { prop = xsltGetNsProp(top, (const xmlChar *)"version", XSLT_NAMESPACE); if (prop == NULL) { - xsltPrintErrorContext(NULL, style, top); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, top, "xsl:version is missing: document may not be a stylesheet\n"); style->warnings++; } else { if ((!xmlStrEqual(prop, (const xmlChar *)"1.0")) && (!xmlStrEqual(prop, (const xmlChar *)"1.1"))) { - xsltPrintErrorContext(NULL, style, top); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, top, "xsl:version: only 1.0 features are supported\n"); /* TODO set up compatibility when not XSLT 1.0 */ style->warnings++; @@ -1783,8 +1761,7 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) { } if (cur->type == XML_TEXT_NODE) { if (cur->content != NULL) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "misplaced text element: '%s'\n", cur->content); } style->errors++; @@ -1816,8 +1793,7 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) { continue; } if (IS_XSLT_NAME(cur, "import")) { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsltParseStylesheetTop: ignoring misplaced import element\n"); style->errors++; } else if (IS_XSLT_NAME(cur, "include")) { @@ -1847,8 +1823,7 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) { } else if (IS_XSLT_NAME(cur, "namespace-alias")) { xsltNamespaceAlias(style, cur); } else { - xsltPrintErrorContext(NULL, style, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, style, cur, "xsltParseStylesheetTop: ignoring unknown %s element\n", cur->name); style->warnings++; @@ -1888,8 +1863,7 @@ xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc) { */ cur = xmlDocGetRootElement(doc); if (cur == NULL) { - xsltPrintErrorContext(NULL, ret, (xmlNodePtr) doc); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, ret, (xmlNodePtr) doc, "xsltParseStylesheetProcess : empty stylesheet\n"); return(NULL); } @@ -1914,8 +1888,7 @@ xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc) { */ prop = xsltGetNsProp(cur, (const xmlChar *)"version", XSLT_NAMESPACE); if (prop == NULL) { - xsltPrintErrorContext(NULL, ret, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, ret, cur, "xsltParseStylesheetProcess : document is not a stylesheet\n"); return(NULL); } @@ -1926,8 +1899,7 @@ xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc) { #endif if (!xmlStrEqual(prop, (const xmlChar *)"1.0")) { - xsltPrintErrorContext(NULL, ret, cur); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, ret, cur, "xsl:version: only 1.0 features are supported\n"); /* TODO set up compatibility when not XSLT 1.0 */ ret->warnings++; @@ -2022,8 +1994,7 @@ xsltParseStylesheetFile(const xmlChar* filename) { res = xsltCheckRead(sec, NULL, filename); if (res == 0) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltParseStylesheetFile: read rights for %s denied\n", filename); return(NULL); @@ -2032,8 +2003,7 @@ xsltParseStylesheetFile(const xmlChar* filename) { doc = xmlParseFile((const char *) filename); if (doc == NULL) { - xsltPrintErrorContext(NULL, NULL, NULL); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, NULL, "xsltParseStylesheetFile : cannot parse %s\n", filename); return(NULL); } @@ -2193,8 +2163,7 @@ xsltLoadStylesheetPI(xmlDocPtr doc) { #endif URI = xmlParseURI((const char *) href); if (URI == NULL) { - xsltPrintErrorContext(NULL, NULL, child); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, child, "xml-stylesheet : href %s is not valid\n", href); xmlFree(href); return(NULL); @@ -2214,8 +2183,7 @@ xsltLoadStylesheetPI(xmlDocPtr doc) { else ID = xmlGetID(doc, (const xmlChar *) URI->fragment); if (ID == NULL) { - xsltPrintErrorContext(NULL, NULL, child); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(NULL, NULL, child, "xml-stylesheet : no ID %s found\n", URI->fragment); } else { xmlDocPtr fake; diff --git a/libxslt/xsltInternals.h b/libxslt/xsltInternals.h index 54af872..2b0c89d 100644 --- a/libxslt/xsltInternals.h +++ b/libxslt/xsltInternals.h @@ -456,6 +456,9 @@ struct _xsltTransformContext { xsltDocumentPtr styleList; /* the stylesheet docs list */ void * sec; /* the security preferences if any */ + + xmlGenericErrorFunc error; /* a specific error handler */ + void * errctx; /* context for the error handler */ }; /** diff --git a/libxslt/xsltutils.c b/libxslt/xsltutils.c index d694780..7732d39 100644 --- a/libxslt/xsltutils.c +++ b/libxslt/xsltutils.c @@ -185,6 +185,35 @@ xsltMessage(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst) { * * ************************************************************************/ +#define XSLT_GET_VAR_STR(msg, str) { \ + int size; \ + int chars; \ + char *larger; \ + va_list ap; \ + \ + str = (char *) xmlMalloc(150); \ + if (str == NULL) \ + return; \ + \ + size = 150; \ + \ + while (1) { \ + va_start(ap, msg); \ + chars = vsnprintf(str, size, msg, ap); \ + va_end(ap); \ + if ((chars > -1) && (chars < size)) \ + break; \ + if (chars > -1) \ + size += chars + 1; \ + else \ + size += 100; \ + if ((larger = (char *) xmlRealloc(str, size)) == NULL) {\ + xmlFree(str); \ + return; \ + } \ + str = larger; \ + } \ +} /** * xsltGenericErrorDefaultFunc: * @ctx: an error context @@ -292,9 +321,16 @@ xsltPrintErrorContext(xsltTransformContextPtr ctxt, const xmlChar *file = NULL; const xmlChar *name = NULL; const char *type = "error"; + xmlGenericErrorFunc error = xsltGenericError; + void *errctx = xsltGenericErrorContext; - if (ctxt != NULL) + if (ctxt != NULL) { ctxt->state = XSLT_STATE_ERROR; + if (ctxt->error != NULL) { + error = ctxt->error; + errctx = ctxt->errctx; + } + } if ((node == NULL) && (ctxt != NULL)) node = ctxt->inst; @@ -330,29 +366,72 @@ xsltPrintErrorContext(xsltTransformContextPtr ctxt, type = "compilation error"; if ((file != NULL) && (line != 0) && (name != NULL)) - xsltGenericError(xsltGenericErrorContext, - "%s: file %s line %d element %s\n", - type, file, line, name); + error(errctx, "%s: file %s line %d element %s\n", + type, file, line, name); else if ((file != NULL) && (name != NULL)) - xsltGenericError(xsltGenericErrorContext, - "%s: file %s element %s\n", - type, file, name); + error(errctx, "%s: file %s element %s\n", type, file, name); else if ((file != NULL) && (line != 0)) - xsltGenericError(xsltGenericErrorContext, - "%s: file %s line %d\n", - type, file, line); + error(errctx, "%s: file %s line %d\n", type, file, line); else if (file != NULL) - xsltGenericError(xsltGenericErrorContext, - "%s: file %s\n", - type, file); + error(errctx, "%s: file %s\n", type, file); else if (name != NULL) - xsltGenericError(xsltGenericErrorContext, - "%s: element %s\n", - type, name); + error(errctx, "%s: element %s\n", type, name); else - xsltGenericError(xsltGenericErrorContext, - "%s\n", - type); + error(errctx, "%s\n", type); +} + +/** + * xsltSetTransformErrorFunc: + * @ctxt: the XSLT transformation context + * @ctx: the new error handling context + * @handler: the new handler function + * + * Function to reset the handler and the error context for out of + * context error messages specific to a given XSLT transromation. + * + * This simply means that @handler will be called for subsequent + * error messages while running the transformation. + */ +void +xsltSetTransformErrorFunc(xsltTransformContextPtr ctxt, + void *ctx, xmlGenericErrorFunc handler) +{ + ctxt->error = handler; + ctxt->errctx = ctx; +} + +/** + * xsltTransformError: + * @ctxt: an XSLT transformation context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format an error messages, gives file, line, position and + * extra parameters, will use the specific transformation context if available + */ +void +xsltTransformError(xsltTransformContextPtr ctxt, + xsltStylesheetPtr style, + xmlNodePtr node, + const char *msg, ...) { + xmlGenericErrorFunc error = xsltGenericError; + void *errctx = xsltGenericErrorContext; + char * str; + + if (ctxt != NULL) { + ctxt->state = XSLT_STATE_ERROR; + if (ctxt->error != NULL) { + error = ctxt->error; + errctx = ctxt->errctx; + } + } + if ((node == NULL) && (ctxt != NULL)) + node = ctxt->inst; + xsltPrintErrorContext(ctxt, style, node); + XSLT_GET_VAR_STR(msg, str); + error(errctx, "%s", str); + if (str != NULL) + xmlFree(str); } /************************************************************************ @@ -635,8 +714,7 @@ xsltDoSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, else if (xmlStrEqual(comp->stype, (const xmlChar *) "number")) comp->number = 1; else { - xsltPrintErrorContext(ctxt, NULL, sorts[j]); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, sorts[j], "xsltDoSortFunction: no support for data-type = %s\n", comp->stype); comp->number = 0; /* use default */ @@ -656,8 +734,7 @@ xsltDoSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, (const xmlChar *) "descending")) comp->descending = 1; else { - xsltPrintErrorContext(ctxt, NULL, sorts[j]); - xsltGenericError(xsltGenericErrorContext, + xsltTransformError(ctxt, NULL, sorts[j], "xsltDoSortFunction: invalid value %s for order\n", comp->order); comp->descending = 0; /* use default */ diff --git a/libxslt/xsltutils.h b/libxslt/xsltutils.h index f6fda10..d2cebb3 100644 --- a/libxslt/xsltutils.h +++ b/libxslt/xsltutils.h @@ -109,6 +109,14 @@ void xsltSetGenericErrorFunc (void *ctx, xmlGenericErrorFunc handler); void xsltSetGenericDebugFunc (void *ctx, xmlGenericErrorFunc handler); +void xsltSetTransformErrorFunc (xsltTransformContextPtr ctxt, + void *ctx, + xmlGenericErrorFunc handler); +void xsltTransformError (xsltTransformContextPtr ctxt, + xsltStylesheetPtr style, + xmlNodePtr node, + const char *msg, + ...); /* * Sorting. -- 2.7.4