mirror of
https://gitlab.gnome.org/GNOME/libxslt
synced 2025-08-08 21:42:07 +03:00
changed date.c to use gmtime_r if available (bug 129983) fixed a namespace
* configure.in, config.h.in, libexslt/date.c: changed date.c to use gmtime_r if available (bug 129983) * libexslt/functions.c: fixed a namespace problem concerning a function with a namespace-qualified name (bug 155197)
This commit is contained in:
@@ -41,6 +41,8 @@ typedef struct _exsltFuncResultPreComp exsltFuncResultPreComp;
|
||||
struct _exsltFuncResultPreComp {
|
||||
xsltElemPreComp comp;
|
||||
xmlXPathCompExprPtr select;
|
||||
xmlNsPtr *nsList;
|
||||
int nsNr;
|
||||
};
|
||||
|
||||
/* Used for callback function in exsltInitFunc */
|
||||
@@ -247,6 +249,8 @@ exsltFreeFuncResultPreComp (exsltFuncResultPreComp *comp) {
|
||||
|
||||
if (comp->select != NULL)
|
||||
xmlXPathFreeCompExpr (comp->select);
|
||||
if (comp->nsList != NULL)
|
||||
xmlFree(comp->nsList);
|
||||
xmlFree(comp);
|
||||
}
|
||||
|
||||
@@ -526,7 +530,16 @@ exsltFuncResultComp (xsltStylesheetPtr style, xmlNodePtr inst,
|
||||
ret->select = xmlXPathCompile (select);
|
||||
xmlFree(select);
|
||||
}
|
||||
|
||||
/*
|
||||
* Precompute the namespace list
|
||||
*/
|
||||
ret->nsList = xmlGetNsList(inst->doc, inst);
|
||||
if (ret->nsList != NULL) {
|
||||
int i = 0;
|
||||
while (ret->nsList[i] != NULL)
|
||||
i++;
|
||||
ret->nsNr = i;
|
||||
}
|
||||
return ((xsltElemPreCompPtr) ret);
|
||||
}
|
||||
|
||||
@@ -536,6 +549,8 @@ exsltFuncResultElem (xsltTransformContextPtr ctxt,
|
||||
exsltFuncResultPreComp *comp) {
|
||||
exsltFuncData *data;
|
||||
xmlXPathObjectPtr ret;
|
||||
xmlNsPtr *oldNsList;
|
||||
int oldNsNr;
|
||||
|
||||
/* It is an error if instantiating the content of the
|
||||
* func:function element results in the instantiation of more than
|
||||
@@ -569,7 +584,13 @@ exsltFuncResultElem (xsltTransformContextPtr ctxt,
|
||||
data->error = 1;
|
||||
return;
|
||||
}
|
||||
oldNsList = ctxt->xpathCtxt->namespaces;
|
||||
oldNsNr = ctxt->xpathCtxt->nsNr;
|
||||
ctxt->xpathCtxt->namespaces = comp->nsList;
|
||||
ctxt->xpathCtxt->nsNr = comp->nsNr;
|
||||
ret = xmlXPathCompiledEval(comp->select, ctxt->xpathCtxt);
|
||||
ctxt->xpathCtxt->nsNr = oldNsNr;
|
||||
ctxt->xpathCtxt->namespaces = oldNsList;
|
||||
if (ret == NULL) {
|
||||
xsltGenericError(xsltGenericErrorContext,
|
||||
"exsltFuncResultElem: ret == NULL\n");
|
||||
|
Reference in New Issue
Block a user