diff options
Diffstat (limited to 'libxslt/extensions.c')
-rw-r--r-- | libxslt/extensions.c | 80 |
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); } |