applied patch from Rob Richards for custom I/O BufferCreateFilenane fixes
* globals.c xmlIO.c include/libxml/globals.h: applied patch from
Rob Richards for custom I/O BufferCreateFilenane fixes bug
#143366
Daniel
diff --git a/globals.c b/globals.c
index f1aa150..ffab8a7 100644
--- a/globals.c
+++ b/globals.c
@@ -169,6 +169,8 @@
#undef xmlMemStrdup
#undef xmlRealloc
+#undef xmlParserInputBufferCreateFilenameValue
+#undef xmlOutputBufferCreateFilenameValue
/**
* xmlParserVersion:
*
@@ -282,6 +284,12 @@
xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue = NULL;
static xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValueThrDef = NULL;
+xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue = NULL;
+static xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValueThrDef = NULL;
+
+xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue = NULL;
+static xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValueThrDef = NULL;
+
/*
* Error handling
*/
@@ -545,6 +553,9 @@
gs->xmlGenericErrorContext = xmlGenericErrorContextThrDef;
gs->xmlRegisterNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef;
gs->xmlDeregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef;
+
+ gs->xmlParserInputBufferCreateFilenameValue = xmlParserInputBufferCreateFilenameValueThrDef;
+ gs->xmlOutputBufferCreateFilenameValue = xmlOutputBufferCreateFilenameValueThrDef;
memset(&gs->xmlLastError, 0, sizeof(xmlError));
xmlMutexUnlock(xmlThrDefMutex);
@@ -639,6 +650,67 @@
return(old);
}
+/**
+ * xmlParserInputBufferCreateFilename:
+ * @func: function pointer to the new ParserInputBufferCreateFilenameFunc
+ *
+ * Registers a callback for URI input file handling
+ *
+ * Returns the old value of the registration function
+ */
+xmlParserInputBufferCreateFilenameFunc
+xmlParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func)
+{
+ xmlParserInputBufferCreateFilenameFunc old = xmlParserInputBufferCreateFilenameValue;
+
+ xmlParserInputBufferCreateFilenameValue = func;
+ return(old);
+}
+
+xmlParserInputBufferCreateFilenameFunc
+xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func)
+{
+ xmlParserInputBufferCreateFilenameFunc old;
+
+ xmlMutexLock(xmlThrDefMutex);
+ old = xmlParserInputBufferCreateFilenameValueThrDef;
+
+ xmlParserInputBufferCreateFilenameValueThrDef = func;
+ xmlMutexUnlock(xmlThrDefMutex);
+
+ return(old);
+}
+
+/**
+ * xmlOutputBufferCreateFilename:
+ * @func: function pointer to the new OutputBufferCreateFilenameFunc
+ *
+ * Registers a callback for URI output file handling
+ *
+ * Returns the old value of the registration function
+ */
+xmlOutputBufferCreateFilenameFunc
+xmlOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func)
+{
+ xmlOutputBufferCreateFilenameFunc old = xmlOutputBufferCreateFilenameValue;
+
+ xmlOutputBufferCreateFilenameValue = func;
+ return(old);
+}
+
+xmlOutputBufferCreateFilenameFunc
+xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func)
+{
+ xmlOutputBufferCreateFilenameFunc old;
+
+ xmlMutexLock(xmlThrDefMutex);
+ old = xmlOutputBufferCreateFilenameValueThrDef;
+
+ xmlOutputBufferCreateFilenameValueThrDef = func;
+ xmlMutexUnlock(xmlThrDefMutex);
+
+ return(old);
+}
#ifdef LIBXML_DOCB_ENABLED
#undef docbDefaultSAXHandler
@@ -981,3 +1053,21 @@
else
return (&xmlGetGlobalState()->xmlDeregisterNodeDefaultValue);
}
+
+#undef xmlParserInputBufferCreateFilenameValue
+xmlParserInputBufferCreateFilenameFunc *
+__xmlParserInputBufferCreateFilenameValue(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlParserInputBufferCreateFilenameValue);
+ else
+ return (&xmlGetGlobalState()->xmlParserInputBufferCreateFilenameValue);
+}
+
+#undef xmlOutputBufferCreateFilenameValue
+xmlOutputBufferCreateFilenameFunc *
+__xmlOutputBufferCreateFilenameValue(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlOutputBufferCreateFilenameValue);
+ else
+ return (&xmlGetGlobalState()->xmlOutputBufferCreateFilenameValue);
+}
\ No newline at end of file