summaryrefslogtreecommitdiff
path: root/libxslt/extensions.c
diff options
context:
space:
mode:
Diffstat (limited to 'libxslt/extensions.c')
-rw-r--r--libxslt/extensions.c80
1 files changed, 46 insertions, 34 deletions
diff --git a/libxslt/extensions.c b/libxslt/extensions.c
index 851d5984..b38f0189 100644
--- a/libxslt/extensions.c
+++ b/libxslt/extensions.c
@@ -204,6 +204,11 @@ xsltFreeExtModule(xsltExtModulePtr ext)
xmlFree(ext);
}
+static void
+xsltFreeExtModuleEntry(void *payload, const xmlChar *name ATTRIBUTE_UNUSED) {
+ xsltFreeExtModule((xsltExtModulePtr) payload);
+}
+
/**
* xsltNewExtData:
* @extModule: the module
@@ -245,6 +250,11 @@ xsltFreeExtData(xsltExtDataPtr ext)
xmlFree(ext);
}
+static void
+xsltFreeExtDataEntry(void *payload, const xmlChar *name ATTRIBUTE_UNUSED) {
+ xsltFreeExtData((xsltExtDataPtr) payload);
+}
+
/**
* xsltNewExtElement:
* @precomp: the pre-computation function
@@ -289,6 +299,11 @@ xsltFreeExtElement(xsltExtElementPtr ext)
xmlFree(ext);
}
+static void
+xsltFreeExtElementEntry(void *payload, const xmlChar *name ATTRIBUTE_UNUSED) {
+ xsltFreeExtElement((xsltExtElementPtr) payload);
+}
+
#ifdef WITH_MODULES
typedef void (*exsltRegisterFunction) (void);
@@ -936,9 +951,10 @@ struct _xsltInitExtCtxt {
* Initializes an extension module
*/
static void
-xsltInitCtxtExt(xsltExtDataPtr styleData, xsltInitExtCtxt * ctxt,
- const xmlChar * URI)
+xsltInitCtxtExt(void *payload, void *data, const xmlChar * URI)
{
+ xsltExtDataPtr styleData = (xsltExtDataPtr) payload;
+ xsltInitExtCtxt *ctxt = (xsltInitExtCtxt *) data;
xsltExtModulePtr module;
xsltExtDataPtr ctxtData;
void *extData;
@@ -1031,8 +1047,7 @@ xsltInitCtxtExts(xsltTransformContextPtr ctxt)
while (style != NULL) {
if (style->extInfos != NULL) {
- xmlHashScan(style->extInfos,
- (xmlHashScanner) xsltInitCtxtExt, &ctx);
+ xmlHashScan(style->extInfos, xsltInitCtxtExt, &ctx);
if (ctx.ret == -1)
return (-1);
}
@@ -1054,9 +1069,10 @@ xsltInitCtxtExts(xsltTransformContextPtr ctxt)
* Shutdown an extension module loaded
*/
static void
-xsltShutdownCtxtExt(xsltExtDataPtr data, xsltTransformContextPtr ctxt,
- const xmlChar * URI)
+xsltShutdownCtxtExt(void *payload, void *vctxt, const xmlChar * URI)
{
+ xsltExtDataPtr data = (xsltExtDataPtr) payload;
+ xsltTransformContextPtr ctxt = (xsltTransformContextPtr) vctxt;
xsltExtModulePtr module;
if ((data == NULL) || (ctxt == NULL) || (URI == NULL))
@@ -1085,9 +1101,8 @@ xsltShutdownCtxtExts(xsltTransformContextPtr ctxt)
return;
if (ctxt->extInfos == NULL)
return;
- xmlHashScan(ctxt->extInfos, (xmlHashScanner) xsltShutdownCtxtExt,
- ctxt);
- xmlHashFree(ctxt->extInfos, (xmlHashDeallocator) xsltFreeExtData);
+ xmlHashScan(ctxt->extInfos, xsltShutdownCtxtExt, ctxt);
+ xmlHashFree(ctxt->extInfos, xsltFreeExtDataEntry);
ctxt->extInfos = NULL;
}
@@ -1100,9 +1115,10 @@ xsltShutdownCtxtExts(xsltTransformContextPtr ctxt)
* Shutdown an extension module loaded
*/
static void
-xsltShutdownExt(xsltExtDataPtr data, xsltStylesheetPtr style,
- const xmlChar * URI)
+xsltShutdownExt(void *payload, void *vctxt, const xmlChar * URI)
{
+ xsltExtDataPtr data = (xsltExtDataPtr) payload;
+ xsltStylesheetPtr style = (xsltStylesheetPtr) vctxt;
xsltExtModulePtr module;
if ((data == NULL) || (style == NULL) || (URI == NULL))
@@ -1120,8 +1136,7 @@ xsltShutdownExt(xsltExtDataPtr data, xsltStylesheetPtr style,
* Don't remove the entry from the hash table here, since
* this will produce segfaults - this fixes bug #340624.
*
- * xmlHashRemoveEntry(style->extInfos, URI,
- * (xmlHashDeallocator) xsltFreeExtData);
+ * xmlHashRemoveEntry(style->extInfos, URI, xsltFreeExtDataEntry);
*/
}
@@ -1138,8 +1153,8 @@ xsltShutdownExts(xsltStylesheetPtr style)
return;
if (style->extInfos == NULL)
return;
- xmlHashScan(style->extInfos, (xmlHashScanner) xsltShutdownExt, style);
- xmlHashFree(style->extInfos, (xmlHashDeallocator) xsltFreeExtData);
+ xmlHashScan(style->extInfos, xsltShutdownExt, style);
+ xmlHashFree(style->extInfos, xsltFreeExtDataEntry);
style->extInfos = NULL;
}
@@ -1327,8 +1342,7 @@ xsltUnregisterExtModule(const xmlChar * URI)
xmlMutexLock(xsltExtMutex);
- ret = xmlHashRemoveEntry(xsltExtensionsHash, URI,
- (xmlHashDeallocator) xsltFreeExtModule);
+ ret = xmlHashRemoveEntry(xsltExtensionsHash, URI, xsltFreeExtModuleEntry);
xmlMutexUnlock(xsltExtMutex);
@@ -1348,8 +1362,7 @@ xsltUnregisterAllExtModules(void)
xmlMutexLock(xsltExtMutex);
- xmlHashFree(xsltExtensionsHash,
- (xmlHashDeallocator) xsltFreeExtModule);
+ xmlHashFree(xsltExtensionsHash, xsltFreeExtModuleEntry);
xsltExtensionsHash = NULL;
xmlMutexUnlock(xsltExtMutex);
@@ -1645,7 +1658,7 @@ xsltRegisterExtModuleElement(const xmlChar * name, const xmlChar * URI,
}
xmlHashUpdateEntry2(xsltElementsHash, name, URI, (void *) ext,
- (xmlHashDeallocator) xsltFreeExtElement);
+ xsltFreeExtElementEntry);
done:
xmlMutexUnlock(xsltExtMutex);
@@ -1788,7 +1801,7 @@ xsltUnregisterExtModuleElement(const xmlChar * name, const xmlChar * URI)
xmlMutexLock(xsltExtMutex);
ret = xmlHashRemoveEntry2(xsltElementsHash, name, URI,
- (xmlHashDeallocator) xsltFreeExtElement);
+ xsltFreeExtElementEntry);
xmlMutexUnlock(xsltExtMutex);
@@ -1805,7 +1818,7 @@ xsltUnregisterAllExtModuleElement(void)
{
xmlMutexLock(xsltExtMutex);
- xmlHashFree(xsltElementsHash, (xmlHashDeallocator) xsltFreeExtElement);
+ xmlHashFree(xsltElementsHash, xsltFreeExtElementEntry);
xsltElementsHash = NULL;
xmlMutexUnlock(xsltExtMutex);
@@ -2247,7 +2260,7 @@ xsltRegisterTestModule(void)
static void
xsltHashScannerModuleFree(void *payload ATTRIBUTE_UNUSED,
void *data ATTRIBUTE_UNUSED,
- xmlChar * name ATTRIBUTE_UNUSED)
+ const xmlChar *name ATTRIBUTE_UNUSED)
{
#ifdef WITH_MODULES
xmlModuleClose(payload);
@@ -2297,10 +2310,11 @@ xsltCleanupGlobals(void)
static void
xsltDebugDumpExtensionsCallback(void *function ATTRIBUTE_UNUSED,
- FILE * output, const xmlChar * name,
+ void *data, const xmlChar * name,
const xmlChar * URI,
const xmlChar * not_used ATTRIBUTE_UNUSED)
{
+ FILE *output = (FILE *) data;
if (!name || !URI)
return;
fprintf(output, "{%s}%s\n", URI, name);
@@ -2308,10 +2322,11 @@ xsltDebugDumpExtensionsCallback(void *function ATTRIBUTE_UNUSED,
static void
xsltDebugDumpExtModulesCallback(void *function ATTRIBUTE_UNUSED,
- FILE * output, const xmlChar * URI,
+ void *data, const xmlChar * URI,
const xmlChar * not_used ATTRIBUTE_UNUSED,
const xmlChar * not_used2 ATTRIBUTE_UNUSED)
{
+ FILE *output = (FILE *) data;
if (!URI)
return;
fprintf(output, "%s\n", URI);
@@ -2335,9 +2350,8 @@ xsltDebugDumpExtensions(FILE * output)
else {
fprintf(output, "Registered Extension Functions:\n");
xmlMutexLock(xsltExtMutex);
- xmlHashScanFull(xsltFunctionsHash,
- (xmlHashScannerFull)
- xsltDebugDumpExtensionsCallback, output);
+ xmlHashScanFull(xsltFunctionsHash, xsltDebugDumpExtensionsCallback,
+ output);
xmlMutexUnlock(xsltExtMutex);
}
if (!xsltElementsHash)
@@ -2345,9 +2359,8 @@ xsltDebugDumpExtensions(FILE * output)
else {
fprintf(output, "\nRegistered Extension Elements:\n");
xmlMutexLock(xsltExtMutex);
- xmlHashScanFull(xsltElementsHash,
- (xmlHashScannerFull)
- xsltDebugDumpExtensionsCallback, output);
+ xmlHashScanFull(xsltElementsHash, xsltDebugDumpExtensionsCallback,
+ output);
xmlMutexUnlock(xsltExtMutex);
}
if (!xsltExtensionsHash)
@@ -2355,9 +2368,8 @@ xsltDebugDumpExtensions(FILE * output)
else {
fprintf(output, "\nRegistered Extension Modules:\n");
xmlMutexLock(xsltExtMutex);
- xmlHashScanFull(xsltExtensionsHash,
- (xmlHashScannerFull)
- xsltDebugDumpExtModulesCallback, output);
+ xmlHashScanFull(xsltExtensionsHash, xsltDebugDumpExtModulesCallback,
+ output);
xmlMutexUnlock(xsltExtMutex);
}