| /* |
| * globals.c: definition and handling of the set of global variables |
| * of the library |
| * |
| * The bottom of this file is automatically generated by build_glob.py |
| * based on the description file global.data |
| * |
| * See Copyright for the status of this software. |
| * |
| * Gary Pennington <Gary.Pennington@uk.sun.com> |
| * daniel@veillard.com |
| */ |
| |
| #define IN_LIBXML |
| #include "libxml.h" |
| |
| #ifdef HAVE_STDLIB_H |
| #include <stdlib.h> |
| #endif |
| #include <string.h> |
| |
| #include <libxml/globals.h> |
| #include <libxml/xmlmemory.h> |
| #include <libxml/threads.h> |
| |
| /* #define DEBUG_GLOBALS */ |
| |
| /* |
| * Helpful Macro |
| */ |
| #ifdef LIBXML_THREAD_ENABLED |
| #define IS_MAIN_THREAD (xmlIsMainThread()) |
| #else |
| #define IS_MAIN_THREAD 1 |
| #endif |
| |
| /* |
| * Mutex to protect "ForNewThreads" variables |
| */ |
| static xmlMutexPtr xmlThrDefMutex = NULL; |
| |
| /** |
| * xmlInitGlobals: |
| * |
| * Additional initialisation for multi-threading |
| */ |
| void xmlInitGlobals(void) |
| { |
| if (xmlThrDefMutex == NULL) |
| xmlThrDefMutex = xmlNewMutex(); |
| } |
| |
| /** |
| * xmlCleanupGlobals: |
| * |
| * Additional cleanup for multi-threading |
| */ |
| void xmlCleanupGlobals(void) |
| { |
| if (xmlThrDefMutex != NULL) { |
| xmlFreeMutex(xmlThrDefMutex); |
| xmlThrDefMutex = NULL; |
| } |
| __xmlGlobalInitMutexDestroy(); |
| } |
| |
| /************************************************************************ |
| * * |
| * All the user accessible global variables of the library * |
| * * |
| ************************************************************************/ |
| |
| /* |
| * Memory allocation routines |
| */ |
| #undef xmlFree |
| #undef xmlMalloc |
| #undef xmlMallocAtomic |
| #undef xmlMemStrdup |
| #undef xmlRealloc |
| |
| #if defined(DEBUG_MEMORY_LOCATION) || defined(DEBUG_MEMORY) |
| xmlFreeFunc xmlFree = (xmlFreeFunc) xmlMemFree; |
| xmlMallocFunc xmlMalloc = (xmlMallocFunc) xmlMemMalloc; |
| xmlMallocFunc xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc; |
| xmlReallocFunc xmlRealloc = (xmlReallocFunc) xmlMemRealloc; |
| xmlStrdupFunc xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup; |
| #else |
| /** |
| * xmlFree: |
| * @mem: an already allocated block of memory |
| * |
| * The variable holding the libxml free() implementation |
| */ |
| xmlFreeFunc xmlFree = (xmlFreeFunc) free; |
| /** |
| * xmlMalloc: |
| * @size: the size requested in bytes |
| * |
| * The variable holding the libxml malloc() implementation |
| * |
| * Returns a pointer to the newly allocated block or NULL in case of error |
| */ |
| xmlMallocFunc xmlMalloc = (xmlMallocFunc) malloc; |
| /** |
| * xmlMallocAtomic: |
| * @size: the size requested in bytes |
| * |
| * The variable holding the libxml malloc() implementation for atomic |
| * data (i.e. blocks not containings pointers), useful when using a |
| * garbage collecting allocator. |
| * |
| * Returns a pointer to the newly allocated block or NULL in case of error |
| */ |
| xmlMallocFunc xmlMallocAtomic = (xmlMallocFunc) malloc; |
| /** |
| * xmlRealloc: |
| * @mem: an already allocated block of memory |
| * @size: the new size requested in bytes |
| * |
| * The variable holding the libxml realloc() implementation |
| * |
| * Returns a pointer to the newly reallocated block or NULL in case of error |
| */ |
| xmlReallocFunc xmlRealloc = (xmlReallocFunc) realloc; |
| /** |
| * xmlMemStrdup: |
| * @str: a zero terminated string |
| * |
| * The variable holding the libxml strdup() implementation |
| * |
| * Returns the copy of the string or NULL in case of error |
| */ |
| xmlStrdupFunc xmlMemStrdup = (xmlStrdupFunc) xmlStrdup; |
| #endif /* DEBUG_MEMORY_LOCATION || DEBUG_MEMORY */ |
| |
| #include <libxml/threads.h> |
| #include <libxml/globals.h> |
| #include <libxml/SAX.h> |
| |
| #undef docbDefaultSAXHandler |
| #undef htmlDefaultSAXHandler |
| #undef oldXMLWDcompatibility |
| #undef xmlBufferAllocScheme |
| #undef xmlDefaultBufferSize |
| #undef xmlDefaultSAXHandler |
| #undef xmlDefaultSAXLocator |
| #undef xmlDoValidityCheckingDefaultValue |
| #undef xmlGenericError |
| #undef xmlStructuredError |
| #undef xmlGenericErrorContext |
| #undef xmlStructuredErrorContext |
| #undef xmlGetWarningsDefaultValue |
| #undef xmlIndentTreeOutput |
| #undef xmlTreeIndentString |
| #undef xmlKeepBlanksDefaultValue |
| #undef xmlLineNumbersDefaultValue |
| #undef xmlLoadExtDtdDefaultValue |
| #undef xmlParserDebugEntities |
| #undef xmlParserVersion |
| #undef xmlPedanticParserDefaultValue |
| #undef xmlSaveNoEmptyTags |
| #undef xmlSubstituteEntitiesDefaultValue |
| #undef xmlRegisterNodeDefaultValue |
| #undef xmlDeregisterNodeDefaultValue |
| #undef xmlLastError |
| |
| #undef xmlParserInputBufferCreateFilenameValue |
| #undef xmlOutputBufferCreateFilenameValue |
| /** |
| * xmlParserVersion: |
| * |
| * Constant string describing the internal version of the library |
| */ |
| const char *xmlParserVersion = LIBXML_VERSION_STRING LIBXML_VERSION_EXTRA; |
| |
| /** |
| * xmlBufferAllocScheme: |
| * |
| * Global setting, default allocation policy for buffers, default is |
| * XML_BUFFER_ALLOC_EXACT |
| */ |
| xmlBufferAllocationScheme xmlBufferAllocScheme = XML_BUFFER_ALLOC_EXACT; |
| static xmlBufferAllocationScheme xmlBufferAllocSchemeThrDef = XML_BUFFER_ALLOC_EXACT; |
| /** |
| * xmlDefaultBufferSize: |
| * |
| * Global setting, default buffer size. Default value is BASE_BUFFER_SIZE |
| */ |
| int xmlDefaultBufferSize = BASE_BUFFER_SIZE; |
| static int xmlDefaultBufferSizeThrDef = BASE_BUFFER_SIZE; |
| |
| /* |
| * Parser defaults |
| */ |
| |
| /** |
| * oldXMLWDcompatibility: |
| * |
| * Global setting, DEPRECATED. |
| */ |
| int oldXMLWDcompatibility = 0; /* DEPRECATED */ |
| /** |
| * xmlParserDebugEntities: |
| * |
| * Global setting, asking the parser to print out debugging informations. |
| * while handling entities. |
| * Disabled by default |
| */ |
| int xmlParserDebugEntities = 0; |
| static int xmlParserDebugEntitiesThrDef = 0; |
| /** |
| * xmlDoValidityCheckingDefaultValue: |
| * |
| * Global setting, indicate that the parser should work in validating mode. |
| * Disabled by default. |
| */ |
| int xmlDoValidityCheckingDefaultValue = 0; |
| static int xmlDoValidityCheckingDefaultValueThrDef = 0; |
| /** |
| * xmlGetWarningsDefaultValue: |
| * |
| * Global setting, indicate that the parser should provide warnings. |
| * Activated by default. |
| */ |
| int xmlGetWarningsDefaultValue = 1; |
| static int xmlGetWarningsDefaultValueThrDef = 1; |
| /** |
| * xmlLoadExtDtdDefaultValue: |
| * |
| * Global setting, indicate that the parser should load DTD while not |
| * validating. |
| * Disabled by default. |
| */ |
| int xmlLoadExtDtdDefaultValue = 0; |
| static int xmlLoadExtDtdDefaultValueThrDef = 0; |
| /** |
| * xmlPedanticParserDefaultValue: |
| * |
| * Global setting, indicate that the parser be pedantic |
| * Disabled by default. |
| */ |
| int xmlPedanticParserDefaultValue = 0; |
| static int xmlPedanticParserDefaultValueThrDef = 0; |
| /** |
| * xmlLineNumbersDefaultValue: |
| * |
| * 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 |
| * applicaton. |
| */ |
| int xmlLineNumbersDefaultValue = 0; |
| static int xmlLineNumbersDefaultValueThrDef = 0; |
| /** |
| * xmlKeepBlanksDefaultValue: |
| * |
| * 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. |
| */ |
| int xmlKeepBlanksDefaultValue = 1; |
| static int xmlKeepBlanksDefaultValueThrDef = 1; |
| /** |
| * xmlSubstituteEntitiesDefaultValue: |
| * |
| * 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. |
| */ |
| int xmlSubstituteEntitiesDefaultValue = 0; |
| static int xmlSubstituteEntitiesDefaultValueThrDef = 0; |
| |
| xmlRegisterNodeFunc xmlRegisterNodeDefaultValue = NULL; |
| static xmlRegisterNodeFunc xmlRegisterNodeDefaultValueThrDef = NULL; |
| xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue = NULL; |
| static xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValueThrDef = NULL; |
| |
| xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue = NULL; |
| static xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValueThrDef = NULL; |
| |
| xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue = NULL; |
| static xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValueThrDef = NULL; |
| |
| /* |
| * Error handling |
| */ |
| |
| /* xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc; */ |
| /* Must initialize xmlGenericError in xmlInitParser */ |
| void XMLCDECL xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED, |
| const char *msg, |
| ...); |
| /** |
| * xmlGenericError: |
| * |
| * Global setting: function used for generic error callbacks |
| */ |
| xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc; |
| static xmlGenericErrorFunc xmlGenericErrorThrDef = xmlGenericErrorDefaultFunc; |
| /** |
| * xmlStructuredError: |
| * |
| * Global setting: function used for structured error callbacks |
| */ |
| xmlStructuredErrorFunc xmlStructuredError = NULL; |
| static xmlStructuredErrorFunc xmlStructuredErrorThrDef = NULL; |
| /** |
| * xmlGenericErrorContext: |
| * |
| * Global setting passed to generic error callbacks |
| */ |
| void *xmlGenericErrorContext = NULL; |
| static void *xmlGenericErrorContextThrDef = NULL; |
| /** |
| * xmlStructuredErrorContext: |
| * |
| * Global setting passed to structured error callbacks |
| */ |
| void *xmlStructuredErrorContext = NULL; |
| static void *xmlStructuredErrorContextThrDef = NULL; |
| xmlError xmlLastError; |
| |
| /* |
| * output defaults |
| */ |
| /** |
| * xmlIndentTreeOutput: |
| * |
| * Global setting, asking the serializer to indent the output tree by default |
| * Enabled by default |
| */ |
| int xmlIndentTreeOutput = 1; |
| static int xmlIndentTreeOutputThrDef = 1; |
| |
| /** |
| * xmlTreeIndentString: |
| * |
| * The string used to do one-level indent. By default is equal to " " (two spaces) |
| */ |
| const char *xmlTreeIndentString = " "; |
| static const char *xmlTreeIndentStringThrDef = " "; |
| |
| /** |
| * xmlSaveNoEmptyTags: |
| * |
| * Global setting, asking the serializer to not output empty tags |
| * as <empty/> but <empty></empty>. those two forms are undistinguishable |
| * once parsed. |
| * Disabled by default |
| */ |
| int xmlSaveNoEmptyTags = 0; |
| static int xmlSaveNoEmptyTagsThrDef = 0; |
| |
| #ifdef LIBXML_SAX1_ENABLED |
| /** |
| * xmlDefaultSAXHandler: |
| * |
| * Default SAX version1 handler for XML, builds the DOM tree |
| */ |
| xmlSAXHandlerV1 xmlDefaultSAXHandler = { |
| xmlSAX2InternalSubset, |
| xmlSAX2IsStandalone, |
| xmlSAX2HasInternalSubset, |
| xmlSAX2HasExternalSubset, |
| xmlSAX2ResolveEntity, |
| xmlSAX2GetEntity, |
| xmlSAX2EntityDecl, |
| xmlSAX2NotationDecl, |
| xmlSAX2AttributeDecl, |
| xmlSAX2ElementDecl, |
| xmlSAX2UnparsedEntityDecl, |
| xmlSAX2SetDocumentLocator, |
| xmlSAX2StartDocument, |
| xmlSAX2EndDocument, |
| xmlSAX2StartElement, |
| xmlSAX2EndElement, |
| xmlSAX2Reference, |
| xmlSAX2Characters, |
| xmlSAX2Characters, |
| xmlSAX2ProcessingInstruction, |
| xmlSAX2Comment, |
| xmlParserWarning, |
| xmlParserError, |
| xmlParserError, |
| xmlSAX2GetParameterEntity, |
| xmlSAX2CDataBlock, |
| xmlSAX2ExternalSubset, |
| 0, |
| }; |
| #endif /* LIBXML_SAX1_ENABLED */ |
| |
| /** |
| * xmlDefaultSAXLocator: |
| * |
| * The default SAX Locator |
| * { getPublicId, getSystemId, getLineNumber, getColumnNumber} |
| */ |
| xmlSAXLocator xmlDefaultSAXLocator = { |
| xmlSAX2GetPublicId, |
| xmlSAX2GetSystemId, |
| xmlSAX2GetLineNumber, |
| xmlSAX2GetColumnNumber |
| }; |
| |
| #ifdef LIBXML_HTML_ENABLED |
| /** |
| * htmlDefaultSAXHandler: |
| * |
| * Default old SAX v1 handler for HTML, builds the DOM tree |
| */ |
| xmlSAXHandlerV1 htmlDefaultSAXHandler = { |
| xmlSAX2InternalSubset, |
| NULL, |
| NULL, |
| NULL, |
| NULL, |
| xmlSAX2GetEntity, |
| NULL, |
| NULL, |
| NULL, |
| NULL, |
| NULL, |
| xmlSAX2SetDocumentLocator, |
| xmlSAX2StartDocument, |
| xmlSAX2EndDocument, |
| xmlSAX2StartElement, |
| xmlSAX2EndElement, |
| NULL, |
| xmlSAX2Characters, |
| xmlSAX2IgnorableWhitespace, |
| xmlSAX2ProcessingInstruction, |
| xmlSAX2Comment, |
| xmlParserWarning, |
| xmlParserError, |
| xmlParserError, |
| xmlSAX2GetParameterEntity, |
| xmlSAX2CDataBlock, |
| NULL, |
| 0, |
| }; |
| #endif /* LIBXML_HTML_ENABLED */ |
| |
| #ifdef LIBXML_DOCB_ENABLED |
| /** |
| * docbDefaultSAXHandler: |
| * |
| * Default old SAX v1 handler for SGML DocBook, builds the DOM tree |
| */ |
| xmlSAXHandlerV1 docbDefaultSAXHandler = { |
| xmlSAX2InternalSubset, |
| xmlSAX2IsStandalone, |
| xmlSAX2HasInternalSubset, |
| xmlSAX2HasExternalSubset, |
| xmlSAX2ResolveEntity, |
| xmlSAX2GetEntity, |
| xmlSAX2EntityDecl, |
| NULL, |
| NULL, |
| NULL, |
| NULL, |
| xmlSAX2SetDocumentLocator, |
| xmlSAX2StartDocument, |
| xmlSAX2EndDocument, |
| xmlSAX2StartElement, |
| xmlSAX2EndElement, |
| xmlSAX2Reference, |
| xmlSAX2Characters, |
| xmlSAX2IgnorableWhitespace, |
| NULL, |
| xmlSAX2Comment, |
| xmlParserWarning, |
| xmlParserError, |
| xmlParserError, |
| xmlSAX2GetParameterEntity, |
| NULL, |
| NULL, |
| 0, |
| }; |
| #endif /* LIBXML_DOCB_ENABLED */ |
| |
| /** |
| * xmlInitializeGlobalState: |
| * @gs: a pointer to a newly allocated global state |
| * |
| * xmlInitializeGlobalState() initialize a global state with all the |
| * default values of the library. |
| */ |
| void |
| xmlInitializeGlobalState(xmlGlobalStatePtr gs) |
| { |
| #ifdef DEBUG_GLOBALS |
| fprintf(stderr, "Initializing globals at %lu for thread %d\n", |
| (unsigned long) gs, xmlGetThreadId()); |
| #endif |
| |
| /* |
| * Perform initialization as required by libxml |
| */ |
| if (xmlThrDefMutex == NULL) |
| xmlInitGlobals(); |
| |
| xmlMutexLock(xmlThrDefMutex); |
| |
| #if defined(LIBXML_DOCB_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED) |
| initdocbDefaultSAXHandler(&gs->docbDefaultSAXHandler); |
| #endif |
| #if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_LEGACY_ENABLED) |
| inithtmlDefaultSAXHandler(&gs->htmlDefaultSAXHandler); |
| #endif |
| |
| gs->oldXMLWDcompatibility = 0; |
| gs->xmlBufferAllocScheme = xmlBufferAllocSchemeThrDef; |
| gs->xmlDefaultBufferSize = xmlDefaultBufferSizeThrDef; |
| #if defined(LIBXML_SAX1_ENABLED) && defined(LIBXML_LEGACY_ENABLED) |
| initxmlDefaultSAXHandler(&gs->xmlDefaultSAXHandler, 1); |
| #endif /* LIBXML_SAX1_ENABLED */ |
| gs->xmlDefaultSAXLocator.getPublicId = xmlSAX2GetPublicId; |
| gs->xmlDefaultSAXLocator.getSystemId = xmlSAX2GetSystemId; |
| gs->xmlDefaultSAXLocator.getLineNumber = xmlSAX2GetLineNumber; |
| gs->xmlDefaultSAXLocator.getColumnNumber = xmlSAX2GetColumnNumber; |
| gs->xmlDoValidityCheckingDefaultValue = |
| xmlDoValidityCheckingDefaultValueThrDef; |
| #if defined(DEBUG_MEMORY_LOCATION) | defined(DEBUG_MEMORY) |
| gs->xmlFree = (xmlFreeFunc) xmlMemFree; |
| gs->xmlMalloc = (xmlMallocFunc) xmlMemMalloc; |
| gs->xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc; |
| gs->xmlRealloc = (xmlReallocFunc) xmlMemRealloc; |
| gs->xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup; |
| #else |
| gs->xmlFree = (xmlFreeFunc) free; |
| gs->xmlMalloc = (xmlMallocFunc) malloc; |
| gs->xmlMallocAtomic = (xmlMallocFunc) malloc; |
| gs->xmlRealloc = (xmlReallocFunc) realloc; |
| gs->xmlMemStrdup = (xmlStrdupFunc) xmlStrdup; |
| #endif |
| gs->xmlGetWarningsDefaultValue = xmlGetWarningsDefaultValueThrDef; |
| gs->xmlIndentTreeOutput = xmlIndentTreeOutputThrDef; |
| gs->xmlTreeIndentString = xmlTreeIndentStringThrDef; |
| gs->xmlKeepBlanksDefaultValue = xmlKeepBlanksDefaultValueThrDef; |
| gs->xmlLineNumbersDefaultValue = xmlLineNumbersDefaultValueThrDef; |
| gs->xmlLoadExtDtdDefaultValue = xmlLoadExtDtdDefaultValueThrDef; |
| gs->xmlParserDebugEntities = xmlParserDebugEntitiesThrDef; |
| gs->xmlParserVersion = LIBXML_VERSION_STRING; |
| gs->xmlPedanticParserDefaultValue = xmlPedanticParserDefaultValueThrDef; |
| gs->xmlSaveNoEmptyTags = xmlSaveNoEmptyTagsThrDef; |
| gs->xmlSubstituteEntitiesDefaultValue = |
| xmlSubstituteEntitiesDefaultValueThrDef; |
| |
| gs->xmlGenericError = xmlGenericErrorThrDef; |
| gs->xmlStructuredError = xmlStructuredErrorThrDef; |
| gs->xmlGenericErrorContext = xmlGenericErrorContextThrDef; |
| gs->xmlStructuredErrorContext = xmlStructuredErrorContextThrDef; |
| gs->xmlRegisterNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef; |
| gs->xmlDeregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef; |
| |
| gs->xmlParserInputBufferCreateFilenameValue = xmlParserInputBufferCreateFilenameValueThrDef; |
| gs->xmlOutputBufferCreateFilenameValue = xmlOutputBufferCreateFilenameValueThrDef; |
| memset(&gs->xmlLastError, 0, sizeof(xmlError)); |
| |
| xmlMutexUnlock(xmlThrDefMutex); |
| } |
| |
| /** |
| * DOC_DISABLE : we ignore missing doc for the xmlThrDef functions, |
| * those are really internal work |
| */ |
| void |
| xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler) { |
| xmlMutexLock(xmlThrDefMutex); |
| xmlGenericErrorContextThrDef = ctx; |
| if (handler != NULL) |
| xmlGenericErrorThrDef = handler; |
| else |
| xmlGenericErrorThrDef = xmlGenericErrorDefaultFunc; |
| xmlMutexUnlock(xmlThrDefMutex); |
| } |
| |
| void |
| xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) { |
| xmlMutexLock(xmlThrDefMutex); |
| xmlStructuredErrorContextThrDef = ctx; |
| xmlStructuredErrorThrDef = handler; |
| xmlMutexUnlock(xmlThrDefMutex); |
| } |
| |
| /** |
| * xmlRegisterNodeDefault: |
| * @func: function pointer to the new RegisterNodeFunc |
| * |
| * Registers a callback for node creation |
| * |
| * Returns the old value of the registration function |
| */ |
| xmlRegisterNodeFunc |
| xmlRegisterNodeDefault(xmlRegisterNodeFunc func) |
| { |
| xmlRegisterNodeFunc old = xmlRegisterNodeDefaultValue; |
| |
| __xmlRegisterCallbacks = 1; |
| xmlRegisterNodeDefaultValue = func; |
| return(old); |
| } |
| |
| xmlRegisterNodeFunc |
| xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func) |
| { |
| xmlRegisterNodeFunc old; |
| |
| xmlMutexLock(xmlThrDefMutex); |
| old = xmlRegisterNodeDefaultValueThrDef; |
| |
| __xmlRegisterCallbacks = 1; |
| xmlRegisterNodeDefaultValueThrDef = func; |
| xmlMutexUnlock(xmlThrDefMutex); |
| |
| return(old); |
| } |
| |
| /** |
| * xmlDeregisterNodeDefault: |
| * @func: function pointer to the new DeregisterNodeFunc |
| * |
| * Registers a callback for node destruction |
| * |
| * Returns the previous value of the deregistration function |
| */ |
| xmlDeregisterNodeFunc |
| xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func) |
| { |
| xmlDeregisterNodeFunc old = xmlDeregisterNodeDefaultValue; |
| |
| __xmlRegisterCallbacks = 1; |
| xmlDeregisterNodeDefaultValue = func; |
| return(old); |
| } |
| |
| xmlDeregisterNodeFunc |
| xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func) |
| { |
| xmlDeregisterNodeFunc old; |
| |
| xmlMutexLock(xmlThrDefMutex); |
| old = xmlDeregisterNodeDefaultValueThrDef; |
| |
| __xmlRegisterCallbacks = 1; |
| xmlDeregisterNodeDefaultValueThrDef = func; |
| xmlMutexUnlock(xmlThrDefMutex); |
| |
| return(old); |
| } |
| |
| xmlParserInputBufferCreateFilenameFunc |
| xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func) |
| { |
| xmlParserInputBufferCreateFilenameFunc old; |
| |
| xmlMutexLock(xmlThrDefMutex); |
| old = xmlParserInputBufferCreateFilenameValueThrDef; |
| if (old == NULL) { |
| old = __xmlParserInputBufferCreateFilename; |
| } |
| |
| xmlParserInputBufferCreateFilenameValueThrDef = func; |
| xmlMutexUnlock(xmlThrDefMutex); |
| |
| return(old); |
| } |
| |
| xmlOutputBufferCreateFilenameFunc |
| xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func) |
| { |
| xmlOutputBufferCreateFilenameFunc old; |
| |
| xmlMutexLock(xmlThrDefMutex); |
| old = xmlOutputBufferCreateFilenameValueThrDef; |
| #ifdef LIBXML_OUTPUT_ENABLED |
| if (old == NULL) { |
| old = __xmlOutputBufferCreateFilename; |
| } |
| #endif |
| xmlOutputBufferCreateFilenameValueThrDef = func; |
| xmlMutexUnlock(xmlThrDefMutex); |
| |
| return(old); |
| } |
| |
| #ifdef LIBXML_DOCB_ENABLED |
| #undef docbDefaultSAXHandler |
| xmlSAXHandlerV1 * |
| __docbDefaultSAXHandler(void) { |
| if (IS_MAIN_THREAD) |
| return (&docbDefaultSAXHandler); |
| else |
| return (&xmlGetGlobalState()->docbDefaultSAXHandler); |
| } |
| #endif |
| |
| #ifdef LIBXML_HTML_ENABLED |
| #undef htmlDefaultSAXHandler |
| xmlSAXHandlerV1 * |
| __htmlDefaultSAXHandler(void) { |
| if (IS_MAIN_THREAD) |
| return (&htmlDefaultSAXHandler); |
| else |
| return (&xmlGetGlobalState()->htmlDefaultSAXHandler); |
| } |
| #endif |
| |
| #undef xmlLastError |
| xmlError * |
| __xmlLastError(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlLastError); |
| else |
| return (&xmlGetGlobalState()->xmlLastError); |
| } |
| |
| /* |
| * The following memory routines were apparently lost at some point, |
| * and were re-inserted at this point on June 10, 2004. Hope it's |
| * the right place for them :-) |
| */ |
| #if defined(LIBXML_THREAD_ALLOC_ENABLED) && defined(LIBXML_THREAD_ENABLED) |
| #undef xmlMalloc |
| xmlMallocFunc * |
| __xmlMalloc(void){ |
| if (IS_MAIN_THREAD) |
| return (&xmlMalloc); |
| else |
| return (&xmlGetGlobalState()->xmlMalloc); |
| } |
| |
| #undef xmlMallocAtomic |
| xmlMallocFunc * |
| __xmlMallocAtomic(void){ |
| if (IS_MAIN_THREAD) |
| return (&xmlMallocAtomic); |
| else |
| return (&xmlGetGlobalState()->xmlMallocAtomic); |
| } |
| |
| #undef xmlRealloc |
| xmlReallocFunc * |
| __xmlRealloc(void){ |
| if (IS_MAIN_THREAD) |
| return (&xmlRealloc); |
| else |
| return (&xmlGetGlobalState()->xmlRealloc); |
| } |
| |
| #undef xmlFree |
| xmlFreeFunc * |
| __xmlFree(void){ |
| if (IS_MAIN_THREAD) |
| return (&xmlFree); |
| else |
| return (&xmlGetGlobalState()->xmlFree); |
| } |
| |
| xmlStrdupFunc * |
| __xmlMemStrdup(void){ |
| if (IS_MAIN_THREAD) |
| return (&xmlMemStrdup); |
| else |
| return (&xmlGetGlobalState()->xmlMemStrdup); |
| } |
| |
| #endif |
| |
| /* |
| * Everything starting from the line below is |
| * Automatically generated by build_glob.py. |
| * Do not modify the previous line. |
| */ |
| |
| |
| #undef oldXMLWDcompatibility |
| int * |
| __oldXMLWDcompatibility(void) { |
| if (IS_MAIN_THREAD) |
| return (&oldXMLWDcompatibility); |
| else |
| return (&xmlGetGlobalState()->oldXMLWDcompatibility); |
| } |
| |
| #undef xmlBufferAllocScheme |
| xmlBufferAllocationScheme * |
| __xmlBufferAllocScheme(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlBufferAllocScheme); |
| else |
| return (&xmlGetGlobalState()->xmlBufferAllocScheme); |
| } |
| xmlBufferAllocationScheme xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v) { |
| xmlBufferAllocationScheme ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlBufferAllocSchemeThrDef; |
| xmlBufferAllocSchemeThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlDefaultBufferSize |
| int * |
| __xmlDefaultBufferSize(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlDefaultBufferSize); |
| else |
| return (&xmlGetGlobalState()->xmlDefaultBufferSize); |
| } |
| int xmlThrDefDefaultBufferSize(int v) { |
| int ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlDefaultBufferSizeThrDef; |
| xmlDefaultBufferSizeThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #ifdef LIBXML_SAX1_ENABLED |
| #undef xmlDefaultSAXHandler |
| xmlSAXHandlerV1 * |
| __xmlDefaultSAXHandler(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlDefaultSAXHandler); |
| else |
| return (&xmlGetGlobalState()->xmlDefaultSAXHandler); |
| } |
| #endif /* LIBXML_SAX1_ENABLED */ |
| |
| #undef xmlDefaultSAXLocator |
| xmlSAXLocator * |
| __xmlDefaultSAXLocator(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlDefaultSAXLocator); |
| else |
| return (&xmlGetGlobalState()->xmlDefaultSAXLocator); |
| } |
| |
| #undef xmlDoValidityCheckingDefaultValue |
| int * |
| __xmlDoValidityCheckingDefaultValue(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlDoValidityCheckingDefaultValue); |
| else |
| return (&xmlGetGlobalState()->xmlDoValidityCheckingDefaultValue); |
| } |
| int xmlThrDefDoValidityCheckingDefaultValue(int v) { |
| int ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlDoValidityCheckingDefaultValueThrDef; |
| xmlDoValidityCheckingDefaultValueThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlGenericError |
| xmlGenericErrorFunc * |
| __xmlGenericError(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlGenericError); |
| else |
| return (&xmlGetGlobalState()->xmlGenericError); |
| } |
| |
| #undef xmlStructuredError |
| xmlStructuredErrorFunc * |
| __xmlStructuredError(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlStructuredError); |
| else |
| return (&xmlGetGlobalState()->xmlStructuredError); |
| } |
| |
| #undef xmlGenericErrorContext |
| void * * |
| __xmlGenericErrorContext(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlGenericErrorContext); |
| else |
| return (&xmlGetGlobalState()->xmlGenericErrorContext); |
| } |
| |
| #undef xmlStructuredErrorContext |
| void * * |
| __xmlStructuredErrorContext(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlStructuredErrorContext); |
| else |
| return (&xmlGetGlobalState()->xmlStructuredErrorContext); |
| } |
| |
| #undef xmlGetWarningsDefaultValue |
| int * |
| __xmlGetWarningsDefaultValue(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlGetWarningsDefaultValue); |
| else |
| return (&xmlGetGlobalState()->xmlGetWarningsDefaultValue); |
| } |
| int xmlThrDefGetWarningsDefaultValue(int v) { |
| int ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlGetWarningsDefaultValueThrDef; |
| xmlGetWarningsDefaultValueThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlIndentTreeOutput |
| int * |
| __xmlIndentTreeOutput(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlIndentTreeOutput); |
| else |
| return (&xmlGetGlobalState()->xmlIndentTreeOutput); |
| } |
| int xmlThrDefIndentTreeOutput(int v) { |
| int ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlIndentTreeOutputThrDef; |
| xmlIndentTreeOutputThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlTreeIndentString |
| const char * * |
| __xmlTreeIndentString(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlTreeIndentString); |
| else |
| return (&xmlGetGlobalState()->xmlTreeIndentString); |
| } |
| const char * xmlThrDefTreeIndentString(const char * v) { |
| const char * ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlTreeIndentStringThrDef; |
| xmlTreeIndentStringThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlKeepBlanksDefaultValue |
| int * |
| __xmlKeepBlanksDefaultValue(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlKeepBlanksDefaultValue); |
| else |
| return (&xmlGetGlobalState()->xmlKeepBlanksDefaultValue); |
| } |
| int xmlThrDefKeepBlanksDefaultValue(int v) { |
| int ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlKeepBlanksDefaultValueThrDef; |
| xmlKeepBlanksDefaultValueThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlLineNumbersDefaultValue |
| int * |
| __xmlLineNumbersDefaultValue(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlLineNumbersDefaultValue); |
| else |
| return (&xmlGetGlobalState()->xmlLineNumbersDefaultValue); |
| } |
| int xmlThrDefLineNumbersDefaultValue(int v) { |
| int ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlLineNumbersDefaultValueThrDef; |
| xmlLineNumbersDefaultValueThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlLoadExtDtdDefaultValue |
| int * |
| __xmlLoadExtDtdDefaultValue(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlLoadExtDtdDefaultValue); |
| else |
| return (&xmlGetGlobalState()->xmlLoadExtDtdDefaultValue); |
| } |
| int xmlThrDefLoadExtDtdDefaultValue(int v) { |
| int ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlLoadExtDtdDefaultValueThrDef; |
| xmlLoadExtDtdDefaultValueThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlParserDebugEntities |
| int * |
| __xmlParserDebugEntities(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlParserDebugEntities); |
| else |
| return (&xmlGetGlobalState()->xmlParserDebugEntities); |
| } |
| int xmlThrDefParserDebugEntities(int v) { |
| int ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlParserDebugEntitiesThrDef; |
| xmlParserDebugEntitiesThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlParserVersion |
| const char * * |
| __xmlParserVersion(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlParserVersion); |
| else |
| return (&xmlGetGlobalState()->xmlParserVersion); |
| } |
| |
| #undef xmlPedanticParserDefaultValue |
| int * |
| __xmlPedanticParserDefaultValue(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlPedanticParserDefaultValue); |
| else |
| return (&xmlGetGlobalState()->xmlPedanticParserDefaultValue); |
| } |
| int xmlThrDefPedanticParserDefaultValue(int v) { |
| int ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlPedanticParserDefaultValueThrDef; |
| xmlPedanticParserDefaultValueThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlSaveNoEmptyTags |
| int * |
| __xmlSaveNoEmptyTags(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlSaveNoEmptyTags); |
| else |
| return (&xmlGetGlobalState()->xmlSaveNoEmptyTags); |
| } |
| int xmlThrDefSaveNoEmptyTags(int v) { |
| int ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlSaveNoEmptyTagsThrDef; |
| xmlSaveNoEmptyTagsThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlSubstituteEntitiesDefaultValue |
| int * |
| __xmlSubstituteEntitiesDefaultValue(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlSubstituteEntitiesDefaultValue); |
| else |
| return (&xmlGetGlobalState()->xmlSubstituteEntitiesDefaultValue); |
| } |
| int xmlThrDefSubstituteEntitiesDefaultValue(int v) { |
| int ret; |
| xmlMutexLock(xmlThrDefMutex); |
| ret = xmlSubstituteEntitiesDefaultValueThrDef; |
| xmlSubstituteEntitiesDefaultValueThrDef = v; |
| xmlMutexUnlock(xmlThrDefMutex); |
| return ret; |
| } |
| |
| #undef xmlRegisterNodeDefaultValue |
| xmlRegisterNodeFunc * |
| __xmlRegisterNodeDefaultValue(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlRegisterNodeDefaultValue); |
| else |
| return (&xmlGetGlobalState()->xmlRegisterNodeDefaultValue); |
| } |
| |
| #undef xmlDeregisterNodeDefaultValue |
| xmlDeregisterNodeFunc * |
| __xmlDeregisterNodeDefaultValue(void) { |
| if (IS_MAIN_THREAD) |
| return (&xmlDeregisterNodeDefaultValue); |
| 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); |
| } |
| |
| #define bottom_globals |
| #include "elfgcchack.h" |