1
0
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:
William M. Brack
2004-10-15 05:46:56 +00:00
parent af05496532
commit 0d28f2ec4e
5 changed files with 43 additions and 5 deletions

View File

@@ -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");