diff --git a/HTMLparser.c b/HTMLparser.c
index 5347abcd..f84b4760 100644
--- a/HTMLparser.c
+++ b/HTMLparser.c
@@ -4844,10 +4844,12 @@ htmlParseDocument(htmlParserCtxtPtr ctxt) {
}
/*
- * SAX: beginning of the document processing.
+ * Document locator is unused. Only for backward compatibility.
*/
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator);
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) {
+ xmlSAXLocator copy = xmlDefaultSAXLocator;
+ ctxt->sax->setDocumentLocator(ctxt->userData, ©);
+ }
xmlDetectEncoding(ctxt);
@@ -5435,9 +5437,10 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
SKIP_BLANKS;
avail = in->end - in->cur;
}
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData,
- &xmlDefaultSAXLocator);
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) {
+ xmlSAXLocator copy = xmlDefaultSAXLocator;
+ ctxt->sax->setDocumentLocator(ctxt->userData, ©);
+ }
if ((ctxt->sax) && (ctxt->sax->startDocument) &&
(!ctxt->disableSAX))
ctxt->sax->startDocument(ctxt->userData);
diff --git a/doc/apibuild.py b/doc/apibuild.py
index 2e388260..932ee76b 100755
--- a/doc/apibuild.py
+++ b/doc/apibuild.py
@@ -63,7 +63,6 @@ ignored_words = {
"XML_DEPRECATED": (0, "macro keyword"),
"XML_GLOBALS_ALLOC": (0, "macro keyword"),
"XML_GLOBALS_ERROR": (0, "macro keyword"),
- "XML_GLOBALS_HTML": (0, "macro keyword"),
"XML_GLOBALS_IO": (0, "macro keyword"),
"XML_GLOBALS_PARSER": (0, "macro keyword"),
"XML_GLOBALS_SAVE": (0, "macro keyword"),
diff --git a/globals.c b/globals.c
index 48024ad7..722484f1 100644
--- a/globals.c
+++ b/globals.c
@@ -20,7 +20,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -79,7 +78,6 @@ struct _xmlGlobalState {
#define XML_OP XML_DECLARE_MEMBER
XML_GLOBALS_ALLOC
XML_GLOBALS_ERROR
-XML_GLOBALS_HTML
XML_GLOBALS_IO
XML_GLOBALS_PARSER
XML_GLOBALS_SAVE
@@ -265,7 +263,7 @@ static int xmlDefaultBufferSizeThrDef = BASE_BUFFER_SIZE;
*
* Global setting, DEPRECATED.
*/
-int oldXMLWDcompatibility = 0; /* DEPRECATED */
+const int oldXMLWDcompatibility = 0; /* DEPRECATED */
/**
* xmlParserDebugEntities:
*
@@ -461,7 +459,7 @@ static int xmlSaveNoEmptyTagsThrDef = 0;
*
* Default SAX version1 handler for XML, builds the DOM tree
*/
-xmlSAXHandlerV1 xmlDefaultSAXHandler = {
+const xmlSAXHandlerV1 xmlDefaultSAXHandler = {
xmlSAX2InternalSubset,
xmlSAX2IsStandalone,
xmlSAX2HasInternalSubset,
@@ -501,7 +499,7 @@ xmlSAXHandlerV1 xmlDefaultSAXHandler = {
* The default SAX Locator
* { getPublicId, getSystemId, getLineNumber, getColumnNumber}
*/
-xmlSAXLocator xmlDefaultSAXLocator = {
+const xmlSAXLocator xmlDefaultSAXLocator = {
xmlSAX2GetPublicId,
xmlSAX2GetSystemId,
xmlSAX2GetLineNumber,
@@ -517,7 +515,7 @@ xmlSAXLocator xmlDefaultSAXLocator = {
*
* Default old SAX v1 handler for HTML, builds the DOM tree
*/
-xmlSAXHandlerV1 htmlDefaultSAXHandler = {
+const xmlSAXHandlerV1 htmlDefaultSAXHandler = {
xmlSAX2InternalSubset,
NULL,
NULL,
@@ -757,20 +755,8 @@ static void
xmlInitGlobalState(xmlGlobalStatePtr gs) {
xmlMutexLock(&xmlThrDefMutex);
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED)
- inithtmlDefaultSAXHandler(&gs->gs_htmlDefaultSAXHandler);
-#endif
-
- gs->gs_oldXMLWDcompatibility = 0;
gs->gs_xmlBufferAllocScheme = xmlBufferAllocSchemeThrDef;
gs->gs_xmlDefaultBufferSize = xmlDefaultBufferSizeThrDef;
-#if defined(LIBXML_SAX1_ENABLED) && defined(LIBXML_LEGACY_ENABLED)
- initxmlDefaultSAXHandler(&gs->gs_xmlDefaultSAXHandler, 1);
-#endif /* LIBXML_SAX1_ENABLED */
- gs->gs_xmlDefaultSAXLocator.getPublicId = xmlSAX2GetPublicId;
- gs->gs_xmlDefaultSAXLocator.getSystemId = xmlSAX2GetSystemId;
- gs->gs_xmlDefaultSAXLocator.getLineNumber = xmlSAX2GetLineNumber;
- gs->gs_xmlDefaultSAXLocator.getColumnNumber = xmlSAX2GetColumnNumber;
gs->gs_xmlDoValidityCheckingDefaultValue =
xmlDoValidityCheckingDefaultValueThrDef;
#ifdef LIBXML_THREAD_ALLOC_ENABLED
@@ -905,7 +891,6 @@ xmlGetThreadLocalStorage(int allowFailure) {
#define XML_OP XML_DEFINE_GLOBAL_WRAPPER
XML_GLOBALS_ALLOC
XML_GLOBALS_ERROR
-XML_GLOBALS_HTML
XML_GLOBALS_IO
XML_GLOBALS_PARSER
XML_GLOBALS_SAVE
@@ -919,6 +904,30 @@ __xmlParserVersion(void) {
return &xmlParserVersion;
}
+const int *
+__oldXMLWDcompatibility(void) {
+ return &oldXMLWDcompatibility;
+}
+
+const xmlSAXLocator *
+__xmlDefaultSAXLocator(void) {
+ return &xmlDefaultSAXLocator;
+}
+
+#ifdef LIBXML_SAX1_ENABLED
+const xmlSAXHandlerV1 *
+__xmlDefaultSAXHandler(void) {
+ return &xmlDefaultSAXHandler;
+}
+
+#ifdef LIBXML_HTML_ENABLED
+const xmlSAXHandlerV1 *
+__htmlDefaultSAXHandler(void) {
+ return &htmlDefaultSAXHandler;
+}
+#endif /* LIBXML_HTML_ENABLED */
+#endif /* LIBXML_SAX1_ENABLED */
+
#endif /* LIBXML_THREAD_ENABLED */
/**
diff --git a/include/libxml/HTMLparser.h b/include/libxml/HTMLparser.h
index 8137c190..0e97425a 100644
--- a/include/libxml/HTMLparser.h
+++ b/include/libxml/HTMLparser.h
@@ -80,22 +80,17 @@ struct _htmlEntityDesc {
const char *desc; /* the description */
};
-/** DOC_DISABLE */
#ifdef LIBXML_SAX1_ENABLED
- #define XML_GLOBALS_HTML \
- XML_OP(htmlDefaultSAXHandler, xmlSAXHandlerV1, XML_DEPRECATED)
-#else
- #define XML_GLOBALS_HTML
+
+XML_DEPRECATED
+XMLPUBVAR const xmlSAXHandlerV1 htmlDefaultSAXHandler;
+
+#ifdef LIBXML_THREAD_ENABLED
+XML_DEPRECATED
+XMLPUBFUN const xmlSAXHandlerV1 *__htmlDefaultSAXHandler(void);
#endif
-#define XML_OP XML_DECLARE_GLOBAL
-XML_GLOBALS_HTML
-#undef XML_OP
-
-#if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION)
- #define htmlDefaultSAXHandler XML_GLOBAL_MACRO(htmlDefaultSAXHandler)
-#endif
-/** DOC_ENABLE */
+#endif /* LIBXML_SAX1_ENABLED */
/*
* There is only few public functions.
@@ -333,11 +328,5 @@ XMLPUBFUN htmlStatus htmlNodeStatus(htmlNodePtr, int) ;
}
#endif
-#else /* LIBXML_HTML_ENABLED */
-
-/** DOC_DISABLE */
-#define XML_GLOBALS_HTML
-/** DOC_ENABLE */
-
#endif /* LIBXML_HTML_ENABLED */
#endif /* __HTML_PARSER_H__ */
diff --git a/include/libxml/parser.h b/include/libxml/parser.h
index f7e011a9..44f1c202 100644
--- a/include/libxml/parser.h
+++ b/include/libxml/parser.h
@@ -841,15 +841,30 @@ typedef xmlParserInputPtr (*xmlExternalEntityLoader) (const char *URL,
*/
XMLPUBVAR const char *const xmlParserVersion;
+XML_DEPRECATED
+XMLPUBVAR const int oldXMLWDcompatibility;
+XML_DEPRECATED
+XMLPUBVAR const xmlSAXLocator xmlDefaultSAXLocator;
+#ifdef LIBXML_SAX1_ENABLED
+XML_DEPRECATED
+XMLPUBVAR const xmlSAXHandlerV1 xmlDefaultSAXHandler;
+#endif
+
#ifdef LIBXML_THREAD_ENABLED
/* backward compatibility */
XMLPUBFUN const char *const *__xmlParserVersion(void);
+XML_DEPRECATED
+XMLPUBFUN const int *__oldXMLWDcompatibility(void);
+XML_DEPRECATED
+XMLPUBFUN const xmlSAXLocator *__xmlDefaultSAXLocator(void);
+#ifdef LIBXML_SAX1_ENABLED
+XML_DEPRECATED
+XMLPUBFUN const xmlSAXHandlerV1 *__xmlDefaultSAXHandler(void);
+#endif
#endif
/** DOC_DISABLE */
-#define XML_GLOBALS_PARSER_CORE \
- XML_OP(oldXMLWDcompatibility, int, XML_DEPRECATED) \
- XML_OP(xmlDefaultSAXLocator, xmlSAXLocator, XML_DEPRECATED) \
+#define XML_GLOBALS_PARSER \
XML_OP(xmlDoValidityCheckingDefaultValue, int, XML_DEPRECATED) \
XML_OP(xmlGetWarningsDefaultValue, int, XML_DEPRECATED) \
XML_OP(xmlKeepBlanksDefaultValue, int, XML_DEPRECATED) \
@@ -859,17 +874,6 @@ XMLPUBFUN const char *const *__xmlParserVersion(void);
XML_OP(xmlPedanticParserDefaultValue, int, XML_DEPRECATED) \
XML_OP(xmlSubstituteEntitiesDefaultValue, int, XML_DEPRECATED)
-#ifdef LIBXML_SAX1_ENABLED
- #define XML_GLOBALS_PARSER_SAX1 \
- XML_OP(xmlDefaultSAXHandler, xmlSAXHandlerV1, XML_DEPRECATED)
-#else
- #define XML_GLOBALS_PARSER_SAX1
-#endif
-
-#define XML_GLOBALS_PARSER \
- XML_GLOBALS_PARSER_CORE \
- XML_GLOBALS_PARSER_SAX1
-
#define XML_OP XML_DECLARE_GLOBAL
XML_GLOBALS_PARSER
#undef XML_OP
diff --git a/parser.c b/parser.c
index e9a3e2de..ab49caba 100644
--- a/parser.c
+++ b/parser.c
@@ -11022,10 +11022,13 @@ xmlParseDocument(xmlParserCtxtPtr ctxt) {
xmlDetectSAX2(ctxt);
/*
- * SAX: beginning of the document processing.
+ * Document locator is unused. Only for backward compatibility.
*/
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator);
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) {
+ xmlSAXLocator copy = xmlDefaultSAXLocator;
+ ctxt->sax->setDocumentLocator(ctxt->userData, ©);
+ }
+
if (ctxt->instate == XML_PARSER_EOF)
return(-1);
@@ -11185,10 +11188,12 @@ xmlParseExtParsedEnt(xmlParserCtxtPtr ctxt) {
xmlDetectSAX2(ctxt);
/*
- * SAX: beginning of the document processing.
+ * Document locator is unused. Only for backward compatibility.
*/
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator);
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) {
+ xmlSAXLocator copy = xmlDefaultSAXLocator;
+ ctxt->sax->setDocumentLocator(ctxt->userData, ©);
+ }
xmlDetectEncoding(ctxt);
@@ -11673,9 +11678,10 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
break;
}
}
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData,
- &xmlDefaultSAXLocator);
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) {
+ xmlSAXLocator copy = xmlDefaultSAXLocator;
+ ctxt->sax->setDocumentLocator(ctxt->userData, ©);
+ }
if ((ctxt->sax) && (ctxt->sax->startDocument) &&
(!ctxt->disableSAX))
ctxt->sax->startDocument(ctxt->userData);