18#define XML_GLOBALS_NO_REDEFINITION
61#ifdef LIBXML_THREAD_ENABLED
62#define IS_MAIN_THREAD (xmlIsMainThreadInternal())
64#define IS_MAIN_THREAD 1
67#define XML_DECLARE_MEMBER(name, type, attrs) \
73#if defined(HAVE_WIN32_THREADS) && \
74 defined(LIBXML_STATIC) && !defined(LIBXML_STATIC_FOR_DLL)
79#define XML_OP XML_DECLARE_MEMBER
96#ifdef LIBXML_THREAD_ENABLED
106#if defined(XML_THREAD_LOCAL) && \
107 !defined(__APPLE__) && \
108 (!defined(HAVE_WIN32_THREADS) || \
109 !defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
117#ifdef HAVE_POSIX_THREADS
122#if defined(__GNUC__) && \
123 defined(__GLIBC__) && \
124 __GLIBC__ * 100 + __GLIBC_MINOR__ < 234
126#pragma weak pthread_getspecific
127#pragma weak pthread_setspecific
128#pragma weak pthread_key_create
129#pragma weak pthread_key_delete
130#pragma weak pthread_equal
131#pragma weak pthread_self
133#define XML_PTHREAD_WEAK
135static int libxml_is_threaded = -1;
144static pthread_key_t globalkey;
145static pthread_t mainthread;
147#elif defined HAVE_WIN32_THREADS
152static DWORD mainthread;
157xmlFreeGlobalState(
void *
state);
171#if defined(DEBUG_MEMORY_LOCATION)
421#ifdef LIBXML_OUTPUT_ENABLED
431int xmlIndentTreeOutput = 1;
432static int xmlIndentTreeOutputThrDef = 1;
439const char *xmlTreeIndentString =
" ";
440static const char *xmlTreeIndentStringThrDef =
" ";
450int xmlSaveNoEmptyTags = 0;
451static int xmlSaveNoEmptyTagsThrDef = 0;
454#ifdef LIBXML_SAX1_ENABLED
510#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_SAX1_ENABLED)
574#ifdef HAVE_POSIX_THREADS
575#ifdef XML_PTHREAD_WEAK
576 if (libxml_is_threaded == -1)
578 (pthread_getspecific !=
NULL) &&
579 (pthread_setspecific !=
NULL) &&
580 (pthread_key_create !=
NULL) &&
581 (pthread_key_delete !=
NULL) &&
587 (pthread_self !=
NULL);
588 if (libxml_is_threaded == 0)
591 pthread_key_create(&globalkey, xmlFreeGlobalState);
592 mainthread = pthread_self();
593#elif defined(HAVE_WIN32_THREADS)
622#ifdef HAVE_POSIX_THREADS
623#ifdef XML_PTHREAD_WEAK
624 if (libxml_is_threaded == 0)
627 pthread_key_delete(globalkey);
628#elif defined(HAVE_WIN32_THREADS)
671#ifdef HAVE_POSIX_THREADS
672#ifdef XML_PTHREAD_WEAK
673 if (libxml_is_threaded == 0)
676 return (pthread_equal(mainthread, pthread_self()));
677#elif defined HAVE_WIN32_THREADS
698#ifdef LIBXML_THREAD_ENABLED
701xmlFreeGlobalState(
void *
state)
721#if defined(HAVE_WIN32_THREADS) && \
722 defined(LIBXML_STATIC) && !defined(LIBXML_STATIC_FOR_DLL)
729 xmlFreeGlobalState(
gs);
749 gs->threadHandle = threadHandle;
750 gs->waitHandle = waitHandle;
759#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED)
760 inithtmlDefaultSAXHandler(&
gs->gs_htmlDefaultSAXHandler);
763 gs->gs_oldXMLWDcompatibility = 0;
766#if defined(LIBXML_SAX1_ENABLED) && defined(LIBXML_LEGACY_ENABLED)
767 initxmlDefaultSAXHandler(&
gs->gs_xmlDefaultSAXHandler, 1);
773 gs->gs_xmlDoValidityCheckingDefaultValue =
775#ifdef LIBXML_THREAD_ALLOC_ENABLED
776#ifdef DEBUG_MEMORY_LOCATION
791#ifdef LIBXML_OUTPUT_ENABLED
792 gs->gs_xmlIndentTreeOutput = xmlIndentTreeOutputThrDef;
793 gs->gs_xmlTreeIndentString = xmlTreeIndentStringThrDef;
794 gs->gs_xmlSaveNoEmptyTags = xmlSaveNoEmptyTagsThrDef;
801 gs->gs_xmlSubstituteEntitiesDefaultValue =
811 gs->gs_xmlParserInputBufferCreateFilenameValue =
813 gs->gs_xmlOutputBufferCreateFilenameValue =
819#ifdef HAVE_POSIX_THREADS
820 pthread_setspecific(globalkey,
gs);
821#elif defined HAVE_WIN32_THREADS
825#if defined(LIBXML_STATIC) && !defined(LIBXML_STATIC_FOR_DLL)
826 xmlRegisterGlobalStateDtor(
gs);
844xmlNewGlobalState(
int allowFailure)
858 fprintf(
stderr,
"libxml2: Failed to allocate globals for thread\n"
859 "libxml2: See xmlCheckThreadLocalStorage\n");
864 xmlInitGlobalState(
gs);
870xmlGetThreadLocalStorage(
int allowFailure) {
877 if (
gs->initialized == 0)
878 xmlInitGlobalState(
gs);
879#elif defined(HAVE_POSIX_THREADS)
882 gs = xmlNewGlobalState(allowFailure);
883#elif defined(HAVE_WIN32_THREADS)
886 gs = xmlNewGlobalState(allowFailure);
896#define XML_DEFINE_GLOBAL_WRAPPER(name, type, attrs) \
897 type *__##name(void) { \
898 if (IS_MAIN_THREAD) \
901 return (&xmlGetThreadLocalStorage(0)->gs_##name); \
904#define XML_OP XML_DEFINE_GLOBAL_WRAPPER
916__xmlParserVersion(
void) {
946#if defined(LIBXML_THREAD_ENABLED) && !defined(USE_TLS)
964#if defined(HAVE_WIN32_THREADS) && \
965 (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
966#if defined(LIBXML_STATIC_FOR_DLL)
989 xmlFreeGlobalState(&globalState);
996 xmlFreeGlobalState(globalval);
1027 xmlBufferAllocationScheme
ret;
1062#ifdef LIBXML_OUTPUT_ENABLED
1063int xmlThrDefIndentTreeOutput(
int v) {
1066 ret = xmlIndentTreeOutputThrDef;
1067 xmlIndentTreeOutputThrDef =
v;
1072const char * xmlThrDefTreeIndentString(
const char *
v) {
1075 ret = xmlTreeIndentStringThrDef;
1076 xmlTreeIndentStringThrDef =
v;
1081int xmlThrDefSaveNoEmptyTags(
int v) {
1084 ret = xmlSaveNoEmptyTagsThrDef;
1085 xmlSaveNoEmptyTagsThrDef =
v;
1148 xmlRegisterNodeFunc old;
1160xmlDeregisterNodeFunc
1163 xmlDeregisterNodeFunc old;
1199#ifdef LIBXML_OUTPUT_ENABLED
1201 old = __xmlOutputBufferCreateFilename;
XMLPUBFUN void xmlSAX2StartDocument(void *ctx)
XMLPUBFUN void xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type, const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
XMLPUBFUN const xmlChar * xmlSAX2GetPublicId(void *ctx)
XMLPUBFUN void xmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name, const xmlChar *publicId, const xmlChar *systemId, const xmlChar *notationName)
XMLPUBFUN void xmlSAX2EndDocument(void *ctx)
XMLPUBFUN xmlEntityPtr xmlSAX2GetParameterEntity(void *ctx, const xmlChar *name)
XMLPUBFUN int xmlSAX2GetLineNumber(void *ctx)
XMLPUBFUN void xmlSAX2Comment(void *ctx, const xmlChar *value)
XMLPUBFUN void xmlSAX2ElementDecl(void *ctx, const xmlChar *name, int type, xmlElementContentPtr content)
XMLPUBFUN void xmlSAX2IgnorableWhitespace(void *ctx, const xmlChar *ch, int len)
XMLPUBFUN int xmlSAX2HasInternalSubset(void *ctx)
XMLPUBFUN void xmlSAX2AttributeDecl(void *ctx, const xmlChar *elem, const xmlChar *fullname, int type, int def, const xmlChar *defaultValue, xmlEnumerationPtr tree)
XMLPUBFUN void xmlSAX2Characters(void *ctx, const xmlChar *ch, int len)
XMLPUBFUN void xmlSAX2NotationDecl(void *ctx, const xmlChar *name, const xmlChar *publicId, const xmlChar *systemId)
XMLPUBFUN int xmlSAX2IsStandalone(void *ctx)
XMLPUBFUN int xmlSAX2GetColumnNumber(void *ctx)
XMLPUBFUN void xmlSAX2CDataBlock(void *ctx, const xmlChar *value, int len)
XMLPUBFUN void xmlSAX2ExternalSubset(void *ctx, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID)
XMLPUBFUN xmlParserInputPtr xmlSAX2ResolveEntity(void *ctx, const xmlChar *publicId, const xmlChar *systemId)
XMLPUBFUN void xmlSAX2InternalSubset(void *ctx, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID)
XMLPUBFUN void xmlSAX2ProcessingInstruction(void *ctx, const xmlChar *target, const xmlChar *data)
XMLPUBFUN const xmlChar * xmlSAX2GetSystemId(void *ctx)
XMLPUBFUN void xmlSAX2Reference(void *ctx, const xmlChar *name)
XMLPUBFUN void xmlSAX2SetDocumentLocator(void *ctx, xmlSAXLocatorPtr loc)
XMLPUBFUN int xmlSAX2HasExternalSubset(void *ctx)
XMLPUBFUN xmlEntityPtr xmlSAX2GetEntity(void *ctx, const xmlChar *name)
static DWORD const fdwReason
#define DLL_THREAD_DETACH
#define GetCurrentProcess()
BOOL WINAPI DuplicateHandle(IN HANDLE hSourceProcessHandle, IN HANDLE hSourceHandle, IN HANDLE hTargetProcessHandle, OUT LPHANDLE lpTargetHandle, IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwOptions)
LPVOID WINAPI TlsGetValue(IN DWORD Index)
BOOL WINAPI TlsSetValue(IN DWORD Index, IN LPVOID Value)
BOOL WINAPI TlsFree(IN DWORD Index)
DWORD WINAPI DECLSPEC_HOTPATCH TlsAlloc(void)
UINT(* handler)(MSIPACKAGE *)
int WINAPIV fprintf(FILE *file, const char *format,...)
BOOL WINAPI DllMain(IN HINSTANCE hinstDLL, IN DWORD dwReason, IN LPVOID lpvReserved)
XMLPUBFUN void xmlMutexLock(xmlMutexPtr tok)
XMLPUBFUN void xmlMutexUnlock(xmlMutexPtr tok)
static IN DWORD IN LPVOID lpvReserved
XML_HIDDEN void xmlCleanupMutex(xmlMutexPtr mutex)
XML_HIDDEN void xmlInitMutex(xmlMutexPtr mutex)
void xmlGenericErrorDefaultFunc(void *ctx ATTRIBUTE_UNUSED, const char *msg,...)
int xmlThrDefKeepBlanksDefaultValue(int v)
int xmlSubstituteEntitiesDefaultValue
void * xmlGenericErrorContext
static xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValueThrDef
xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue
xmlReallocFunc xmlRealloc
int xmlThrDefDoValidityCheckingDefaultValue(int v)
static int xmlLineNumbersDefaultValueThrDef
static xmlRegisterNodeFunc xmlRegisterNodeDefaultValueThrDef
static char * xmlPosixStrdup(const char *cur)
xmlRegisterNodeFunc xmlRegisterNodeDefaultValue
int xmlThrDefParserDebugEntities(int v)
int xmlCheckThreadLocalStorage(void)
xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue
int xmlThrDefPedanticParserDefaultValue(int v)
xmlGenericErrorFunc xmlGenericError
void xmlInitializeGlobalState(xmlGlobalStatePtr gs ATTRIBUTE_UNUSED)
static int xmlGetWarningsDefaultValueThrDef
xmlBufferAllocationScheme xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v)
static xmlStructuredErrorFunc xmlStructuredErrorThrDef
static int parserInitialized
void xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler)
static void * xmlGenericErrorContextThrDef
int xmlThrDefLoadExtDtdDefaultValue(int v)
int xmlParserDebugEntities
static int xmlIsMainThreadInternal(void)
static xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValueThrDef
xmlOutputBufferCreateFilenameFunc xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func)
static int xmlSubstituteEntitiesDefaultValueThrDef
void * xmlStructuredErrorContext
int oldXMLWDcompatibility
static int xmlKeepBlanksDefaultValueThrDef
static void * xmlStructuredErrorContextThrDef
xmlParserInputBufferCreateFilenameFunc xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func)
void xmlInitGlobals(void)
static int xmlParserDebugEntitiesThrDef
int xmlLoadExtDtdDefaultValue
int xmlThrDefGetWarningsDefaultValue(int v)
void xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler)
void xmlCleanupGlobals(void)
xmlRegisterNodeFunc xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func)
xmlDeregisterNodeFunc xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func)
xmlStructuredErrorFunc xmlStructuredError
static int xmlDefaultBufferSizeThrDef
int xmlThrDefLineNumbersDefaultValue(int v)
int xmlIsMainThread(void)
static int xmlLoadExtDtdDefaultValueThrDef
static xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValueThrDef
static int xmlDoValidityCheckingDefaultValueThrDef
void xmlInitGlobalsInternal(void)
static xmlMutex xmlThrDefMutex
xmlSAXLocator xmlDefaultSAXLocator
void xmlCleanupGlobalsInternal(void)
xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue
int xmlThrDefDefaultBufferSize(int v)
static xmlBufferAllocationScheme xmlBufferAllocSchemeThrDef
int xmlDoValidityCheckingDefaultValue
xmlMallocFunc xmlMallocAtomic
int xmlKeepBlanksDefaultValue
static int xmlPedanticParserDefaultValueThrDef
int xmlThrDefSubstituteEntitiesDefaultValue(int v)
xmlStrdupFunc xmlMemStrdup
int xmlPedanticParserDefaultValue
int xmlGetWarningsDefaultValue
xmlGlobalStatePtr xmlGetGlobalState(void)
static xmlGenericErrorFunc xmlGenericErrorThrDef
int xmlLineNumbersDefaultValue
xmlBufferAllocationScheme xmlBufferAllocScheme
XMLPUBVAR const char *const xmlParserVersion
XML_GLOBALS_PARSER XMLPUBFUN void xmlInitParser(void)
#define XML_GLOBALS_PARSER
XML_HIDDEN int __xmlRegisterCallbacks
BOOL WINAPI RegisterWaitForSingleObject(OUT PHANDLE phNewWaitObject, IN HANDLE hObject, IN WAITORTIMERCALLBACK Callback, IN PVOID Context, IN ULONG dwMilliseconds, IN ULONG dwFlags)
BOOL WINAPI UnregisterWait(IN HANDLE WaitHandle)
HANDLE WINAPI GetCurrentThread(void)
DWORD WINAPI GetCurrentThreadId(void)
#define TLS_OUT_OF_INDEXES
#define WT_EXECUTEONLYONCE
#define DUPLICATE_SAME_ACCESS
xmlParserInputBufferPtr(* xmlParserInputBufferCreateFilenameFunc)(const char *URI, xmlCharEncoding enc)
xmlOutputBufferPtr(* xmlOutputBufferCreateFilenameFunc)(const char *URI, xmlCharEncodingHandlerPtr encoder, int compression)
xmlParserInputBufferPtr __xmlParserInputBufferCreateFilename(const char *URI, xmlCharEncoding enc)
XMLPUBFUN void xmlParserError(void *ctx, const char *msg,...) LIBXML_ATTR_FORMAT(2
XMLPUBFUN void xmlResetError(xmlErrorPtr err)
void(*) typedef void(* xmlStructuredErrorFunc)(void *userData, const xmlError *error)
#define XML_GLOBALS_ERROR
XMLPUBFUN void XMLPUBFUN void xmlParserWarning(void *ctx, const char *msg,...) LIBXML_ATTR_FORMAT(2
void(* xmlGenericErrorFunc)(void *ctx, const char *msg,...) LIBXML_ATTR_FORMAT(2
XMLPUBFUN char * xmlMemoryStrdup(const char *str)
void *(* xmlReallocFunc)(void *mem, size_t size)
XMLPUBFUN void xmlMemFree(void *ptr)
XMLPUBFUN void * xmlMemRealloc(void *ptr, size_t size)
#define XML_GLOBALS_ALLOC
char *(* xmlStrdupFunc)(const char *str)
XMLPUBFUN void * xmlMemMalloc(size_t size) LIBXML_ATTR_ALLOC_SIZE(1)
void(* xmlFreeFunc)(void *mem)
XMLPUBFUN xmlChar * xmlCharStrdup(const char *cur)