diff --git a/dict.c b/dict.c index 5654be31..a4ba3676 100644 --- a/dict.c +++ b/dict.c @@ -1062,10 +1062,6 @@ xmlGlobalRandom(void) { */ unsigned xmlRandom(void) { -#ifdef LIBXML_THREAD_ENABLED return(xoroshiro64ss(xmlGetLocalRngState())); -#else - return(xmlGlobalRandom()); -#endif } diff --git a/doc/apibuild.py b/doc/apibuild.py index 7bbb23f3..c2181828 100755 --- a/doc/apibuild.py +++ b/doc/apibuild.py @@ -60,11 +60,6 @@ ignored_words = { "ATTRIBUTE_COUNTED_BY": (3, "macro keyword"), "XML_DEPRECATED": (0, "macro keyword"), "XML_DEPRECATED_MEMBER": (0, "macro keyword"), - "XML_GLOBALS_ALLOC": (0, "macro keyword"), - "XML_GLOBALS_ERROR": (0, "macro keyword"), - "XML_GLOBALS_IO": (0, "macro keyword"), - "XML_GLOBALS_PARSER": (0, "macro keyword"), - "XML_GLOBALS_TREE": (0, "macro keyword"), "XML_THREAD_LOCAL": (0, "macro keyword"), } diff --git a/doc/libxml2-api.xml b/doc/libxml2-api.xml index 75432ead..4399769c 100644 --- a/doc/libxml2-api.xml +++ b/doc/libxml2-api.xml @@ -652,9 +652,6 @@ - - - @@ -1445,8 +1442,6 @@ - - @@ -6750,18 +6745,6 @@ crash if you try to modify the tree)'/> DEPRECATED: This handler is unused and will be removed from future versions. Default old SAX v1 handler for HTML, builds the DOM tree - - DEPRECATED: Don't use. Global setting, default allocation policy for buffers, default is XML_BUFFER_ALLOC_EXACT - - - DEPRECATED: Don't use. Global setting, default buffer size. Default value is BASE_BUFFER_SIZE - - - DEPRECATED: This handler is unused and will be removed from future versions. Default SAX version1 handler for XML, builds the DOM tree - - - DEPRECATED: Don't use The default SAX Locator { getPublicId, getSystemId, getLineNumber, getColumnNumber} - @mem: an already allocated block of memory The variable holding the libxml free() implementation @@ -6781,9 +6764,6 @@ crash if you try to modify the tree)'/> @str: a zero terminated string The variable holding the libxml strdup() implementation Returns the copy of the string or NULL in case of error - - DEPRECATED, always 0. - arbitrary depth limit for the XML documents that we allow to process. This is not a limitation of the parser but a safety boundary feature. It can be disabled with the XML_PARSE_HUGE parser option. diff --git a/globals.c b/globals.c index 8523d4ec..f230653a 100644 --- a/globals.c +++ b/globals.c @@ -74,6 +74,54 @@ static xmlMutex xmlThrDefMutex; * pointer. */ +struct _xmlGlobalState { +#ifdef USE_TLS + int initialized; +#endif + +#ifdef USE_WAIT_DTOR + void *threadHandle; + void *waitHandle; +#endif + + unsigned localRngState[2]; + + xmlError lastError; + +#ifdef LIBXML_THREAD_ALLOC_ENABLED + xmlMallocFunc malloc; + xmlMallocFunc mallocAtomic; + xmlReallocFunc realloc; + xmlFreeFunc free; + xmlStrdupFunc memStrdup; +#endif + + int doValidityCheckingDefaultValue; + int getWarningsDefaultValue; + int keepBlanksDefaultValue; + int lineNumbersDefaultValue; + int loadExtDtdDefaultValue; + int pedanticParserDefaultValue; + int substituteEntitiesDefaultValue; + +#ifdef LIBXML_OUTPUT_ENABLED + int indentTreeOutput; + const char *treeIndentString; + int saveNoEmptyTags; +#endif + + xmlGenericErrorFunc genericError; + void *genericErrorContext; + xmlStructuredErrorFunc structuredError; + void *structuredErrorContext; + + xmlRegisterNodeFunc registerNodeDefaultValue; + xmlDeregisterNodeFunc deregisterNodeDefaultValue; + + xmlParserInputBufferCreateFilenameFunc parserInputBufferCreateFilenameValue; + xmlOutputBufferCreateFilenameFunc outputBufferCreateFilenameValue; +}; + #ifdef LIBXML_THREAD_ENABLED /* @@ -98,32 +146,6 @@ static xmlMutex xmlThrDefMutex; #endif #endif -#define XML_DECLARE_MEMBER(name, type, attrs) \ - type gs_##name; - -struct _xmlGlobalState { -#ifdef USE_TLS - int initialized; -#endif - -#ifdef USE_WAIT_DTOR - void *threadHandle; - void *waitHandle; -#endif - - unsigned localRngState[2]; - - xmlError lastError; - -#define XML_OP XML_DECLARE_MEMBER -XML_GLOBALS_ALLOC -XML_GLOBALS_PARSER -XML_GLOBALS_ERROR -XML_GLOBALS_TREE -XML_GLOBALS_IO -#undef XML_OP -}; - #ifdef USE_TLS static XML_THREAD_LOCAL xmlGlobalState globalState; #endif @@ -148,6 +170,10 @@ static DWORD globalkey = TLS_OUT_OF_INDEXES; static void xmlFreeGlobalState(void *state); +#else /* LIBXML_THREAD_ENABLED */ + +static xmlGlobalState globalState; + #endif /* LIBXML_THREAD_ENABLED */ /************************************************************************ @@ -247,234 +273,31 @@ const int xmlDefaultBufferSize = BASE_BUFFER_SIZE; * DEPRECATED, always 0. */ const int xmlParserDebugEntities = 0; -/** - * xmlDoValidityCheckingDefaultValue: - * - * DEPRECATED: Use the modern options API with XML_PARSE_DTDVALID. - * - * Global setting, indicate that the parser should work in validating mode. - * Disabled by default. - */ -#if !defined(LIBXML_THREAD_ENABLED) -int xmlDoValidityCheckingDefaultValue = 0; -#endif + static int xmlDoValidityCheckingDefaultValueThrDef = 0; -/** - * xmlGetWarningsDefaultValue: - * - * DEPRECATED: Use the modern options API with XML_PARSE_NOWARNING. - * - * Global setting, indicate that the DTD validation should provide warnings. - * Activated by default. - */ -#if !defined(LIBXML_THREAD_ENABLED) -int xmlGetWarningsDefaultValue = 1; -#endif static int xmlGetWarningsDefaultValueThrDef = 1; -/** - * xmlLoadExtDtdDefaultValue: - * - * DEPRECATED: Use the modern options API with XML_PARSE_DTDLOAD. - * - * Global setting, indicate that the parser should load DTD while not - * validating. - * Disabled by default. - */ -#if !defined(LIBXML_THREAD_ENABLED) -int xmlLoadExtDtdDefaultValue = 0; -#endif static int xmlLoadExtDtdDefaultValueThrDef = 0; -/** - * xmlPedanticParserDefaultValue: - * - * DEPRECATED: Use the modern options API with XML_PARSE_PEDANTIC. - * - * Global setting, indicate that the parser be pedantic - * Disabled by default. - */ -#if !defined(LIBXML_THREAD_ENABLED) -int xmlPedanticParserDefaultValue = 0; -#endif static int xmlPedanticParserDefaultValueThrDef = 0; -/** - * xmlLineNumbersDefaultValue: - * - * DEPRECATED: The modern options API always enables line numbers. - * - * Global setting, indicate that the parser should store the line number - * in the content field of elements in the DOM tree. - * Disabled by default since this may not be safe for old classes of - * application. - */ -#if !defined(LIBXML_THREAD_ENABLED) -int xmlLineNumbersDefaultValue = 0; -#endif static int xmlLineNumbersDefaultValueThrDef = 0; -/** - * xmlKeepBlanksDefaultValue: - * - * DEPRECATED: Use the modern options API with XML_PARSE_NOBLANKS. - * - * Global setting, indicate that the parser should keep all blanks - * nodes found in the content - * Activated by default, this is actually needed to have the parser - * conformant to the XML Recommendation, however the option is kept - * for some applications since this was libxml1 default behaviour. - */ -#if !defined(LIBXML_THREAD_ENABLED) -int xmlKeepBlanksDefaultValue = 1; -#endif static int xmlKeepBlanksDefaultValueThrDef = 1; -/** - * xmlSubstituteEntitiesDefaultValue: - * - * DEPRECATED: Use the modern options API with XML_PARSE_NOENT. - * - * Global setting, indicate that the parser should not generate entity - * references but replace them with the actual content of the entity - * Disabled by default, this should be activated when using XPath since - * the XPath data model requires entities replacement and the XPath - * engine does not handle entities references transparently. - */ -#if !defined(LIBXML_THREAD_ENABLED) -int xmlSubstituteEntitiesDefaultValue = 0; -#endif static int xmlSubstituteEntitiesDefaultValueThrDef = 0; -/** - * xmlRegisterNodeDefaultValue: - * - * DEPRECATED: Don't use - */ -#if !defined(LIBXML_THREAD_ENABLED) -xmlRegisterNodeFunc xmlRegisterNodeDefaultValue = NULL; -#endif static xmlRegisterNodeFunc xmlRegisterNodeDefaultValueThrDef = NULL; - -/** - * xmlDeregisterNodeDefaultValue: - * - * DEPRECATED: Don't use - */ -#if !defined(LIBXML_THREAD_ENABLED) -xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue = NULL; -#endif static xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValueThrDef = NULL; -/** - * xmlParserInputBufferCreateFilenameValue: - * - * DEPRECATED: Don't use - */ -#if !defined(LIBXML_THREAD_ENABLED) -xmlParserInputBufferCreateFilenameFunc -xmlParserInputBufferCreateFilenameValue = NULL; -#endif static xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValueThrDef = NULL; - -/** - * xmlOutputBufferCreateFilenameValue: - * - * DEPRECATED: Don't use - */ -#if !defined(LIBXML_THREAD_ENABLED) -xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue = NULL; -#endif static xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValueThrDef = NULL; -/** - * xmlGenericError: - * - * DEPRECATED: Use xmlCtxtSetErrorHandler. - * - * Global setting: function used for generic error callbacks - */ -#if !defined(LIBXML_THREAD_ENABLED) -xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc; -#endif static xmlGenericErrorFunc xmlGenericErrorThrDef = xmlGenericErrorDefaultFunc; -/** - * xmlStructuredError: - * - * DEPRECATED: Use xmlCtxtSetErrorHandler. - * - * Global setting: function used for structured error callbacks - */ -#if !defined(LIBXML_THREAD_ENABLED) -xmlStructuredErrorFunc xmlStructuredError = NULL; -#endif static xmlStructuredErrorFunc xmlStructuredErrorThrDef = NULL; -/** - * xmlGenericErrorContext: - * - * DEPRECATED: Use xmlCtxtSetErrorHandler. - * - * Global setting passed to generic error callbacks - */ -#if !defined(LIBXML_THREAD_ENABLED) -void *xmlGenericErrorContext = NULL; -#endif static void *xmlGenericErrorContextThrDef = NULL; -/** - * xmlStructuredErrorContext: - * - * DEPRECATED: Use xmlCtxtSetErrorHandler. - * - * Global setting passed to structured error callbacks - */ -#if !defined(LIBXML_THREAD_ENABLED) -void *xmlStructuredErrorContext = NULL; -#endif static void *xmlStructuredErrorContextThrDef = NULL; -#if !defined(LIBXML_THREAD_ENABLED) -xmlError xmlLastError; -#endif #ifdef LIBXML_OUTPUT_ENABLED -/* - * output defaults - */ -/** - * xmlIndentTreeOutput: - * - * DEPRECATED: Use XML_SAVE_INDENT and XML_SAVE_NO_INDENT. - * - * Global setting, asking the serializer to indent the output tree by default - * Enabled by default - */ -#if !defined(LIBXML_THREAD_ENABLED) -int xmlIndentTreeOutput = 1; -#endif static int xmlIndentTreeOutputThrDef = 1; - -/** - * xmlTreeIndentString: - * - * DEPRECATED: Use xmlSaveSetIndentString. - * - * The string used to do one-level indent. By default is equal to - * " " (two spaces) - */ -#if !defined(LIBXML_THREAD_ENABLED) -const char *xmlTreeIndentString = " "; -#endif static const char *xmlTreeIndentStringThrDef = " "; - -/** - * xmlSaveNoEmptyTags: - * - * DEPRECATED: Use XML_SAVE_EMPTY and XML_SAVE_NO_EMPTY. - * - * Global setting, asking the serializer to not output empty tags - * as but . those two forms are indistinguishable - * once parsed. - * Disabled by default - */ -#if !defined(LIBXML_THREAD_ENABLED) -int xmlSaveNoEmptyTags = 0; -#endif static int xmlSaveNoEmptyTagsThrDef = 0; #endif /* LIBXML_OUTPUT_ENABLED */ @@ -575,6 +398,9 @@ const xmlSAXHandlerV1 htmlDefaultSAXHandler = { }; #endif /* LIBXML_HTML_ENABLED */ +static void +xmlInitGlobalState(xmlGlobalStatePtr gs); + /************************************************************************ * * * Per thread global state handling * @@ -605,6 +431,8 @@ void xmlInitGlobalsInternal(void) { if (globalkey == TLS_OUT_OF_INDEXES) globalkey = TlsAlloc(); #endif +#else /* no thread support */ + xmlInitGlobalState(&globalState); #endif } @@ -648,7 +476,7 @@ void xmlCleanupGlobalsInternal(void) { } #endif #else /* no thread support */ - xmlResetError(&xmlLastError); + xmlResetError(&globalState.lastError); #endif xmlCleanupMutex(&xmlThrDefMutex); @@ -692,6 +520,74 @@ xmlIsMainThread(void) { return(0); } +static void +xmlInitGlobalState(xmlGlobalStatePtr gs) { + gs->localRngState[0] = xmlGlobalRandom(); + gs->localRngState[1] = xmlGlobalRandom(); + + memset(&gs->lastError, 0, sizeof(xmlError)); + +#ifdef LIBXML_THREAD_ALLOC_ENABLED + /* XML_GLOBALS_ALLOC */ + gs->gs_xmlFree = free; + gs->gs_xmlMalloc = malloc; + gs->gs_xmlMallocAtomic = malloc; + gs->gs_xmlRealloc = realloc; + gs->gs_xmlMemStrdup = xmlPosixStrdup; +#endif + + xmlMutexLock(&xmlThrDefMutex); + + /* XML_GLOBALS_PARSER */ + gs->doValidityCheckingDefaultValue = + xmlDoValidityCheckingDefaultValueThrDef; + gs->getWarningsDefaultValue = xmlGetWarningsDefaultValueThrDef; + gs->keepBlanksDefaultValue = xmlKeepBlanksDefaultValueThrDef; + gs->lineNumbersDefaultValue = xmlLineNumbersDefaultValueThrDef; + gs->loadExtDtdDefaultValue = xmlLoadExtDtdDefaultValueThrDef; + gs->pedanticParserDefaultValue = xmlPedanticParserDefaultValueThrDef; + gs->substituteEntitiesDefaultValue = + xmlSubstituteEntitiesDefaultValueThrDef; +#ifdef LIBXML_OUTPUT_ENABLED + gs->indentTreeOutput = xmlIndentTreeOutputThrDef; + gs->treeIndentString = xmlTreeIndentStringThrDef; + gs->saveNoEmptyTags = xmlSaveNoEmptyTagsThrDef; +#endif + + /* XML_GLOBALS_ERROR */ + gs->genericError = xmlGenericErrorThrDef; + gs->structuredError = xmlStructuredErrorThrDef; + gs->genericErrorContext = xmlGenericErrorContextThrDef; + gs->structuredErrorContext = xmlStructuredErrorContextThrDef; + + /* XML_GLOBALS_TREE */ + gs->registerNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef; + gs->deregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef; + + /* XML_GLOBALS_IO */ + gs->parserInputBufferCreateFilenameValue = + xmlParserInputBufferCreateFilenameValueThrDef; + gs->outputBufferCreateFilenameValue = + xmlOutputBufferCreateFilenameValueThrDef; + + xmlMutexUnlock(&xmlThrDefMutex); + +#ifdef USE_TLS + gs->initialized = 1; +#endif + +#ifdef HAVE_POSIX_THREADS + pthread_setspecific(globalkey, gs); +#elif defined HAVE_WIN32_THREADS +#ifndef USE_TLS + TlsSetValue(globalkey, gs); +#endif +#ifdef USE_WAIT_DTOR + xmlRegisterGlobalStateDtor(gs); +#endif +#endif +} + #ifdef LIBXML_THREAD_ENABLED static void @@ -700,14 +596,9 @@ xmlFreeGlobalState(void *state) xmlGlobalState *gs = (xmlGlobalState *) state; /* - * Free any memory allocated in the thread's xmlLastError. If it + * Free any memory allocated in the thread's error struct. If it * weren't for this indirect allocation, we wouldn't need * a destructor with thread-local storage at all! - * - * It would be nice if we could make xmlLastError a special error - * type which uses statically allocated, fixed-size buffers. - * But the xmlError struct is fully public and widely used, - * so changes are dangerous. */ xmlResetError(&gs->lastError); #ifndef USE_TLS @@ -748,74 +639,6 @@ xmlRegisterGlobalStateDtor(xmlGlobalState *gs) { } #endif /* USE_WAIT_DTOR */ -static void -xmlInitGlobalState(xmlGlobalStatePtr gs) { - gs->localRngState[0] = xmlGlobalRandom(); - gs->localRngState[1] = xmlGlobalRandom(); - - memset(&gs->lastError, 0, sizeof(xmlError)); - -#ifdef LIBXML_THREAD_ALLOC_ENABLED - /* XML_GLOBALS_ALLOC */ - gs->gs_xmlFree = free; - gs->gs_xmlMalloc = malloc; - gs->gs_xmlMallocAtomic = malloc; - gs->gs_xmlRealloc = realloc; - gs->gs_xmlMemStrdup = xmlPosixStrdup; -#endif - - xmlMutexLock(&xmlThrDefMutex); - - /* XML_GLOBALS_PARSER */ - gs->gs_xmlDoValidityCheckingDefaultValue = - xmlDoValidityCheckingDefaultValueThrDef; - gs->gs_xmlGetWarningsDefaultValue = xmlGetWarningsDefaultValueThrDef; - gs->gs_xmlKeepBlanksDefaultValue = xmlKeepBlanksDefaultValueThrDef; - gs->gs_xmlLineNumbersDefaultValue = xmlLineNumbersDefaultValueThrDef; - gs->gs_xmlLoadExtDtdDefaultValue = xmlLoadExtDtdDefaultValueThrDef; - gs->gs_xmlPedanticParserDefaultValue = xmlPedanticParserDefaultValueThrDef; - gs->gs_xmlSubstituteEntitiesDefaultValue = - xmlSubstituteEntitiesDefaultValueThrDef; -#ifdef LIBXML_OUTPUT_ENABLED - gs->gs_xmlIndentTreeOutput = xmlIndentTreeOutputThrDef; - gs->gs_xmlTreeIndentString = xmlTreeIndentStringThrDef; - gs->gs_xmlSaveNoEmptyTags = xmlSaveNoEmptyTagsThrDef; -#endif - - /* XML_GLOBALS_ERROR */ - gs->gs_xmlGenericError = xmlGenericErrorThrDef; - gs->gs_xmlStructuredError = xmlStructuredErrorThrDef; - gs->gs_xmlGenericErrorContext = xmlGenericErrorContextThrDef; - gs->gs_xmlStructuredErrorContext = xmlStructuredErrorContextThrDef; - - /* XML_GLOBALS_TREE */ - gs->gs_xmlRegisterNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef; - gs->gs_xmlDeregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef; - - /* XML_GLOBALS_IO */ - gs->gs_xmlParserInputBufferCreateFilenameValue = - xmlParserInputBufferCreateFilenameValueThrDef; - gs->gs_xmlOutputBufferCreateFilenameValue = - xmlOutputBufferCreateFilenameValueThrDef; - - xmlMutexUnlock(&xmlThrDefMutex); - -#ifdef USE_TLS - gs->initialized = 1; -#endif - -#ifdef HAVE_POSIX_THREADS - pthread_setspecific(globalkey, gs); -#elif defined HAVE_WIN32_THREADS -#ifndef USE_TLS - TlsSetValue(globalkey, gs); -#endif -#ifdef USE_WAIT_DTOR - xmlRegisterGlobalStateDtor(gs); -#endif -#endif -} - #ifndef USE_TLS /** * xmlNewGlobalState: @@ -882,26 +705,112 @@ xmlGetThreadLocalStorage(int allowFailure) { return(gs); } -/* Define thread-local storage accessors with macro magic */ +#else /* LIBXML_THREAD_ENABLED */ -#define XML_DEFINE_GLOBAL_WRAPPER(name, type, attrs) \ - type *__##name(void) { \ - return (&xmlGetThreadLocalStorage(0)->gs_##name); \ - } +static xmlGlobalStatePtr +xmlGetThreadLocalStorage(int allowFailure ATTRIBUTE_UNUSED) { + return(&globalState); +} -#define XML_OP XML_DEFINE_GLOBAL_WRAPPER -XML_GLOBALS_ALLOC -XML_GLOBALS_PARSER -XML_GLOBALS_ERROR -XML_GLOBALS_TREE -XML_GLOBALS_IO -#undef XML_OP +#endif /* LIBXML_THREAD_ENABLED */ const xmlError * __xmlLastError(void) { return(&xmlGetThreadLocalStorage(0)->lastError); } +int * +__xmlDoValidityCheckingDefaultValue(void) { + return(&xmlGetThreadLocalStorage(0)->doValidityCheckingDefaultValue); +} + +int * +__xmlGetWarningsDefaultValue(void) { + return(&xmlGetThreadLocalStorage(0)->getWarningsDefaultValue); +} + +int * +__xmlKeepBlanksDefaultValue(void) { + return(&xmlGetThreadLocalStorage(0)->keepBlanksDefaultValue); +} + +int * +__xmlLineNumbersDefaultValue(void) { + return(&xmlGetThreadLocalStorage(0)->lineNumbersDefaultValue); +} + +int * +__xmlLoadExtDtdDefaultValue(void) { + return(&xmlGetThreadLocalStorage(0)->loadExtDtdDefaultValue); +} + +int * +__xmlPedanticParserDefaultValue(void) { + return(&xmlGetThreadLocalStorage(0)->pedanticParserDefaultValue); +} + +int * +__xmlSubstituteEntitiesDefaultValue(void) { + return(&xmlGetThreadLocalStorage(0)->substituteEntitiesDefaultValue); +} + +#ifdef LIBXML_OUTPUT_ENABLED +int * +__xmlIndentTreeOutput(void) { + return(&xmlGetThreadLocalStorage(0)->indentTreeOutput); +} + +const char ** +__xmlTreeIndentString(void) { + return(&xmlGetThreadLocalStorage(0)->treeIndentString); +} + +int * +__xmlSaveNoEmptyTags(void) { + return(&xmlGetThreadLocalStorage(0)->saveNoEmptyTags); +} +#endif + +xmlGenericErrorFunc * +__xmlGenericError(void) { + return(&xmlGetThreadLocalStorage(0)->genericError); +} + +void ** +__xmlGenericErrorContext(void) { + return(&xmlGetThreadLocalStorage(0)->genericErrorContext); +} + +xmlStructuredErrorFunc * +__xmlStructuredError(void) { + return(&xmlGetThreadLocalStorage(0)->structuredError); +} + +void ** +__xmlStructuredErrorContext(void) { + return(&xmlGetThreadLocalStorage(0)->structuredErrorContext); +} + +xmlRegisterNodeFunc * +__xmlRegisterNodeDefaultValue(void) { + return(&xmlGetThreadLocalStorage(0)->registerNodeDefaultValue); +} + +xmlDeregisterNodeFunc * +__xmlDeregisterNodeDefaultValue(void) { + return(&xmlGetThreadLocalStorage(0)->deregisterNodeDefaultValue); +} + +xmlParserInputBufferCreateFilenameFunc * +__xmlParserInputBufferCreateFilenameValue(void) { + return(&xmlGetThreadLocalStorage(0)->parserInputBufferCreateFilenameValue); +} + +xmlOutputBufferCreateFilenameFunc * +__xmlOutputBufferCreateFilenameValue(void) { + return(&xmlGetThreadLocalStorage(0)->outputBufferCreateFilenameValue); +} + /** * xmlGetLocalRngState: * @@ -912,8 +821,6 @@ xmlGetLocalRngState(void) { return(xmlGetThreadLocalStorage(0)->localRngState); } -#endif /* LIBXML_THREAD_ENABLED */ - /** * xmlCheckThreadLocalStorage: * @@ -946,11 +853,7 @@ xmlCheckThreadLocalStorage(void) { */ xmlError * xmlGetLastErrorInternal(void) { -#ifdef LIBXML_THREAD_ENABLED return(&xmlGetThreadLocalStorage(0)->lastError); -#else - return(&xmlLastError); -#endif } /** DOC_DISABLE */ diff --git a/include/libxml/parser.h b/include/libxml/parser.h index 575cd894..090a3a41 100644 --- a/include/libxml/parser.h +++ b/include/libxml/parser.h @@ -971,6 +971,8 @@ typedef xmlParserInputPtr (*xmlExternalEntityLoader) (const char *URL, */ XMLPUBVAR const char *const xmlParserVersion; + +/** DOC_DISABLE */ XML_DEPRECATED XMLPUBVAR const int xmlParserDebugEntities; XML_DEPRECATED @@ -980,50 +982,44 @@ XML_DEPRECATED XMLPUBVAR const xmlSAXHandlerV1 xmlDefaultSAXHandler; #endif -/** DOC_DISABLE */ -#define XML_GLOBALS_PARSER_CORE \ - XML_OP(xmlDoValidityCheckingDefaultValue, int, XML_DEPRECATED) \ - XML_OP(xmlGetWarningsDefaultValue, int, XML_DEPRECATED) \ - XML_OP(xmlKeepBlanksDefaultValue, int, XML_DEPRECATED) \ - XML_OP(xmlLineNumbersDefaultValue, int, XML_DEPRECATED) \ - XML_OP(xmlLoadExtDtdDefaultValue, int, XML_DEPRECATED) \ - XML_OP(xmlPedanticParserDefaultValue, int, XML_DEPRECATED) \ - XML_OP(xmlSubstituteEntitiesDefaultValue, int, XML_DEPRECATED) +XML_DEPRECATED +XMLPUBFUN int *__xmlDoValidityCheckingDefaultValue(void); +XML_DEPRECATED +XMLPUBFUN int *__xmlGetWarningsDefaultValue(void); +XML_DEPRECATED +XMLPUBFUN int *__xmlKeepBlanksDefaultValue(void); +XML_DEPRECATED +XMLPUBFUN int *__xmlLineNumbersDefaultValue(void); +XML_DEPRECATED +XMLPUBFUN int *__xmlLoadExtDtdDefaultValue(void); +XML_DEPRECATED +XMLPUBFUN int *__xmlPedanticParserDefaultValue(void); +XML_DEPRECATED +XMLPUBFUN int *__xmlSubstituteEntitiesDefaultValue(void); #ifdef LIBXML_OUTPUT_ENABLED - #define XML_GLOBALS_PARSER_OUTPUT \ - XML_OP(xmlIndentTreeOutput, int, XML_NO_ATTR) \ - XML_OP(xmlTreeIndentString, const char *, XML_NO_ATTR) \ - XML_OP(xmlSaveNoEmptyTags, int, XML_NO_ATTR) -#else - #define XML_GLOBALS_PARSER_OUTPUT +XMLPUBFUN int *__xmlIndentTreeOutput(void); +XMLPUBFUN const char **__xmlTreeIndentString(void); +XMLPUBFUN int *__xmlSaveNoEmptyTags(void); #endif -#define XML_GLOBALS_PARSER \ - XML_GLOBALS_PARSER_CORE \ - XML_GLOBALS_PARSER_OUTPUT - -#define XML_OP XML_DECLARE_GLOBAL -XML_GLOBALS_PARSER -#undef XML_OP - -#if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION) +#ifndef XML_GLOBALS_NO_REDEFINITION #define xmlDoValidityCheckingDefaultValue \ - XML_GLOBAL_MACRO(xmlDoValidityCheckingDefaultValue) + (*__xmlDoValidityCheckingDefaultValue()) #define xmlGetWarningsDefaultValue \ - XML_GLOBAL_MACRO(xmlGetWarningsDefaultValue) - #define xmlKeepBlanksDefaultValue XML_GLOBAL_MACRO(xmlKeepBlanksDefaultValue) + (*__xmlGetWarningsDefaultValue()) + #define xmlKeepBlanksDefaultValue (*__xmlKeepBlanksDefaultValue()) #define xmlLineNumbersDefaultValue \ - XML_GLOBAL_MACRO(xmlLineNumbersDefaultValue) - #define xmlLoadExtDtdDefaultValue XML_GLOBAL_MACRO(xmlLoadExtDtdDefaultValue) + (*__xmlLineNumbersDefaultValue()) + #define xmlLoadExtDtdDefaultValue (*__xmlLoadExtDtdDefaultValue()) #define xmlPedanticParserDefaultValue \ - XML_GLOBAL_MACRO(xmlPedanticParserDefaultValue) + (*__xmlPedanticParserDefaultValue()) #define xmlSubstituteEntitiesDefaultValue \ - XML_GLOBAL_MACRO(xmlSubstituteEntitiesDefaultValue) + (*__xmlSubstituteEntitiesDefaultValue()) #ifdef LIBXML_OUTPUT_ENABLED - #define xmlIndentTreeOutput XML_GLOBAL_MACRO(xmlIndentTreeOutput) - #define xmlTreeIndentString XML_GLOBAL_MACRO(xmlTreeIndentString) - #define xmlSaveNoEmptyTags XML_GLOBAL_MACRO(xmlSaveNoEmptyTags) + #define xmlIndentTreeOutput (*__xmlIndentTreeOutput()) + #define xmlTreeIndentString (*__xmlTreeIndentString()) + #define xmlSaveNoEmptyTags (*__xmlSaveNoEmptyTags()) #endif #endif /** DOC_ENABLE */ diff --git a/include/libxml/tree.h b/include/libxml/tree.h index dae09435..fbbb591a 100644 --- a/include/libxml/tree.h +++ b/include/libxml/tree.h @@ -678,26 +678,22 @@ typedef void (*xmlDeregisterNodeFunc) (xmlNodePtr node); * Variables. */ +/** DOC_DISABLE */ XML_DEPRECATED XMLPUBVAR const xmlBufferAllocationScheme xmlBufferAllocScheme; XML_DEPRECATED XMLPUBVAR const int xmlDefaultBufferSize; -/** DOC_DISABLE */ -#define XML_GLOBALS_TREE \ - XML_OP(xmlRegisterNodeDefaultValue, xmlRegisterNodeFunc, XML_DEPRECATED) \ - XML_OP(xmlDeregisterNodeDefaultValue, xmlDeregisterNodeFunc, \ - XML_DEPRECATED) +XML_DEPRECATED +XMLPUBFUN xmlRegisterNodeFunc *__xmlRegisterNodeDefaultValue(void); +XML_DEPRECATED +XMLPUBFUN xmlDeregisterNodeFunc *__xmlDeregisterNodeDefaultValue(void); -#define XML_OP XML_DECLARE_GLOBAL -XML_GLOBALS_TREE -#undef XML_OP - -#if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION) +#ifndef XML_GLOBALS_NO_REDEFINITION #define xmlRegisterNodeDefaultValue \ - XML_GLOBAL_MACRO(xmlRegisterNodeDefaultValue) + (*__xmlRegisterNodeDefaultValue()) #define xmlDeregisterNodeDefaultValue \ - XML_GLOBAL_MACRO(xmlDeregisterNodeDefaultValue) + (*__xmlDeregisterNodeDefaultValue()) #endif /** DOC_ENABLE */ diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h index 11d41a33..06472b04 100644 --- a/include/libxml/xmlIO.h +++ b/include/libxml/xmlIO.h @@ -176,21 +176,18 @@ struct _xmlOutputBuffer { #endif /* LIBXML_OUTPUT_ENABLED */ /** DOC_DISABLE */ -#define XML_GLOBALS_IO \ - XML_OP(xmlParserInputBufferCreateFilenameValue, \ - xmlParserInputBufferCreateFilenameFunc, XML_DEPRECATED) \ - XML_OP(xmlOutputBufferCreateFilenameValue, \ - xmlOutputBufferCreateFilenameFunc, XML_DEPRECATED) +XML_DEPRECATED +XMLPUBFUN xmlParserInputBufferCreateFilenameFunc * +__xmlParserInputBufferCreateFilenameValue(void); +XML_DEPRECATED +XMLPUBFUN xmlOutputBufferCreateFilenameFunc * +__xmlOutputBufferCreateFilenameValue(void); -#define XML_OP XML_DECLARE_GLOBAL -XML_GLOBALS_IO -#undef XML_OP - -#if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION) +#ifndef XML_GLOBALS_NO_REDEFINITION #define xmlParserInputBufferCreateFilenameValue \ - XML_GLOBAL_MACRO(xmlParserInputBufferCreateFilenameValue) + (*__xmlParserInputBufferCreateFilenameValue()) #define xmlOutputBufferCreateFilenameValue \ - XML_GLOBAL_MACRO(xmlOutputBufferCreateFilenameValue) + (*__xmlOutputBufferCreateFilenameValue()) #endif /** DOC_ENABLE */ diff --git a/include/libxml/xmlerror.h b/include/libxml/xmlerror.h index cb4f45bf..5774c4c5 100644 --- a/include/libxml/xmlerror.h +++ b/include/libxml/xmlerror.h @@ -870,31 +870,20 @@ typedef void (*xmlGenericErrorFunc) (void *ctx, typedef void (*xmlStructuredErrorFunc) (void *userData, const xmlError *error); /** DOC_DISABLE */ -#if defined(LIBXML_THREAD_ENABLED) XML_DEPRECATED -XMLPUBFUN const xmlError * -__xmlLastError(void); -#elif !defined(IN_LIBXML) -XML_DEPRECATED -XMLPUBVAR const xmlError xmlLastError; -#endif +XMLPUBFUN const xmlError *__xmlLastError(void); -#define XML_GLOBALS_ERROR \ - XML_OP(xmlGenericError, xmlGenericErrorFunc, XML_NO_ATTR) \ - XML_OP(xmlGenericErrorContext, void *, XML_NO_ATTR) \ - XML_OP(xmlStructuredError, xmlStructuredErrorFunc, XML_NO_ATTR) \ - XML_OP(xmlStructuredErrorContext, void *, XML_NO_ATTR) +XMLPUBFUN xmlGenericErrorFunc *__xmlGenericError(void); +XMLPUBFUN void **__xmlGenericErrorContext(void); +XMLPUBFUN xmlStructuredErrorFunc *__xmlStructuredError(void); +XMLPUBFUN void **__xmlStructuredErrorContext(void); -#define XML_OP XML_DECLARE_GLOBAL -XML_GLOBALS_ERROR -#undef XML_OP - -#if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION) - #define xmlLastError XML_GLOBAL_MACRO(xmlLastError) - #define xmlGenericError XML_GLOBAL_MACRO(xmlGenericError) - #define xmlGenericErrorContext XML_GLOBAL_MACRO(xmlGenericErrorContext) - #define xmlStructuredError XML_GLOBAL_MACRO(xmlStructuredError) - #define xmlStructuredErrorContext XML_GLOBAL_MACRO(xmlStructuredErrorContext) +#ifndef XML_GLOBALS_NO_REDEFINITION + #define xmlLastError (*__xmlLastError()) + #define xmlGenericError (*__xmlGenericError()) + #define xmlGenericErrorContext (*__xmlGenericErrorContext()) + #define xmlStructuredError (*__xmlStructuredError()) + #define xmlStructuredErrorContext (*__xmlStructuredErrorContext()) #endif /** DOC_ENABLE */ diff --git a/include/libxml/xmlexports.h b/include/libxml/xmlexports.h index 52267fae..acf4320b 100644 --- a/include/libxml/xmlexports.h +++ b/include/libxml/xmlexports.h @@ -114,21 +114,6 @@ #endif -/* - * Accessors for globals - */ - -#define XML_NO_ATTR - -#ifdef LIBXML_THREAD_ENABLED - #define XML_DECLARE_GLOBAL(name, type, attrs) \ - attrs XMLPUBFUN type *__##name(void); - #define XML_GLOBAL_MACRO(name) (*__##name()) -#else - #define XML_DECLARE_GLOBAL(name, type, attrs) \ - attrs XMLPUBVAR type name; -#endif - /* * Originally declared in xmlversion.h which is generated */ diff --git a/include/libxml/xmlmemory.h b/include/libxml/xmlmemory.h index 9a57b129..2b8c3aa8 100644 --- a/include/libxml/xmlmemory.h +++ b/include/libxml/xmlmemory.h @@ -69,27 +69,25 @@ typedef char *(*xmlStrdupFunc)(const char *str); * - xmlMemStrdup * - xmlFree */ -/** DOC_DISABLE */ #ifdef LIBXML_THREAD_ALLOC_ENABLED - #define XML_GLOBALS_ALLOC \ - XML_OP(xmlMalloc, xmlMallocFunc, XML_NO_ATTR) \ - XML_OP(xmlMallocAtomic, xmlMallocFunc, XML_NO_ATTR) \ - XML_OP(xmlRealloc, xmlReallocFunc, XML_NO_ATTR) \ - XML_OP(xmlFree, xmlFreeFunc, XML_NO_ATTR) \ - XML_OP(xmlMemStrdup, xmlStrdupFunc, XML_NO_ATTR) - #define XML_OP XML_DECLARE_GLOBAL - XML_GLOBALS_ALLOC - #undef XML_OP - #if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION) - #define xmlMalloc XML_GLOBAL_MACRO(xmlMalloc) - #define xmlMallocAtomic XML_GLOBAL_MACRO(xmlMallocAtomic) - #define xmlRealloc XML_GLOBAL_MACRO(xmlRealloc) - #define xmlFree XML_GLOBAL_MACRO(xmlFree) - #define xmlMemStrdup XML_GLOBAL_MACRO(xmlMemStrdup) - #endif -#else - #define XML_GLOBALS_ALLOC + +/** DOC_DISABLE */ +XMLPUBFUN xmlMallocFunc *__xmlMalloc(void); +XMLPUBFUN xmlMallocFunc *__xmlMallocAtomic(void); +XMLPUBFUN xmlReallocFunc *__xmlRealloc(void); +XMLPUBFUN xmlFreeFunc *__xmlFree(void); +XMLPUBFUN xmlStrdupFunc *__xmlMemStrdup(void); + +#ifndef XML_GLOBALS_NO_REDEFINITION + #define xmlMalloc (*__xmlMalloc()) + #define xmlMallocAtomic (*__xmlMallocAtomic()) + #define xmlRealloc (*__xmlRealloc()) + #define xmlFree (*__xmlFree()) + #define xmlMemStrdup (*__xmlMemStrdup()) +#endif /** DOC_ENABLE */ + +#else XMLPUBVAR xmlMallocFunc xmlMalloc; XMLPUBVAR xmlMallocFunc xmlMallocAtomic; XMLPUBVAR xmlReallocFunc xmlRealloc; diff --git a/include/private/globals.h b/include/private/globals.h index d111701e..88a38256 100644 --- a/include/private/globals.h +++ b/include/private/globals.h @@ -9,9 +9,7 @@ xmlCleanupGlobalsInternal(void); XML_HIDDEN xmlError * xmlGetLastErrorInternal(void); -#ifdef LIBXML_THREAD_ENABLED XML_HIDDEN unsigned * xmlGetLocalRngState(void); -#endif #endif /* XML_GLOBALS_H_PRIVATE__ */