typedef struct _exsltFuncFunctionData exsltFuncFunctionData;
struct _exsltFuncFunctionData {
- int nargs;
- xmlNodePtr content;
+ int nargs; /* number of arguments to the function */
+ xmlNodePtr content; /* the func:fuction template content */
};
typedef struct _exsltFuncData exsltFuncData;
struct _exsltFuncData {
- xmlHashTablePtr funcs;
- xmlXPathObjectPtr result;
- int error;
+ xmlHashTablePtr funcs; /* pointer to the stylesheet module data */
+ xmlXPathObjectPtr result; /* returned by func:result */
+ int error; /* did an error occur? */
};
exsltFuncStyleShutdown (xsltStylesheetPtr style ATTRIBUTE_UNUSED,
const xmlChar *URI ATTRIBUTE_UNUSED,
xmlHashTablePtr data) {
- xmlHashFree(data, NULL);
+ xmlHashFree(data, (xmlHashDeallocator) xmlFree);
}
/**
xsltApplyOneTemplate (tctxt, xmlXPathGetContextNode(ctxt),
func->content, NULL, params);
tctxt->insert = oldInsert;
+ if (params != NULL)
+ xsltFreeStackElemList(params);
if (data->error != 0)
return;
"{%s}%s: cannot write to result tree while "
"executing a function\n",
ctxt->context->functionURI, ctxt->context->function);
+ xmlFreeNode(fake);
return;
}
+ xmlFreeNode(fake);
valuePush(ctxt, ret);
}
"func:result content must be empty if it"
" has a select attribute\n");
data->error = 1;
+ xmlFree(select);
return;
}
ret = xmlXPathEvalExpression(select, ctxt->xpathCtxt);
+ xmlFree(select);
if (ret == NULL) {
xsltGenericError(xsltGenericErrorContext,
"exsltFuncResultElem: ret == NULL\n");