/*
* libxml2_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
* Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
*/
#define IN_LIBXML
#define UNDEF_IMPORT_C_IN_DATA
#include <assert.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include "xmlenglibxml.h"
#include <stdapis/libxml2/libxml2_globals.h>
#include "libxml2_xmlschemastypes.h"
const xeGlobalConstData xeGlobalConsts =
{
LIBXML_VERSION_STRING // xmlParserVersion field
};
const xeGlobalConstData* xeGetGlobalConsts()
{
return &xeGlobalConsts;
}
/**
* xmlParserVersion:
*
* Constant string describing the internal version of the library
*/
XMLPUBFUNEXPORT const char* const xmlParserVersion = LIBXML_VERSION_STRING;
/*
This function creates and initializes new xmlGlobalState structure
and stores pointer to it into Thread-Local Storage of this DLL.
If TLS is not NULL, then nothing happens and pointer to existing global data is returned
This function is used once prior any use of libxml2 code!
It called from XmlEngine::XmlEngineAttachL() function
and must be called by any other client of libxml2's API if XmlEngineAttachL()
is not used.
*/
XMLPUBFUNEXPORT xmlGlobalStatePtr xmlCreateAndInitializeGlobalState()
{
xmlGlobalStatePtr gs = xeGetTLS();
if(gs)
return gs; // already initialized;
gs = (xmlGlobalStatePtr) malloc(sizeof(xmlGlobalState));
if(gs)
{
memset(gs, 0, sizeof(xmlGlobalState));
xeSetTLS(gs);
xmlInitializeGlobalState(gs);
}
return gs;
}
/*
Performs complete cleanup of the resource allocated for Libxml2.
Global state data is destroyed.
On Symbian:
Thread-Local Storage is set to NULL after the cleanup finished.
@note XmlEngine::XmlEngineCleanup(TAny*) calls this function
as part of XML Engine shutdown sequence; but it also adds
counter for multi-user (within one thread) processing support.
@note This function should not be directly used by Symbian applications;
the only exception for this rule is usage of libxml2 by other
open-source libraries [XmlEngine::XmlEngineCleanup(TAny*) is preferred]
*/
XMLPUBFUNEXPORT void xmlCleanupGlobalData()
{
DEFINE_GS_PROXY /* NOTE: Initialize GS proxy initialize before using any GS member */
xmlGlobalStatePtr gs = xeGetTLS();
if(!gs)
return;
SET_GS_PROXY(gs);
xmlSchemaCleanupTypes();
xmlResetLastError();
xmlCleanupCharEncodingHandlers();
xmlCleanupParser();
xeXPathCleanup();
xeCleanupDOMStringConverter();
#ifdef XMLENGINE_XSLT
if(xsltGlobalsCleanupFunc)
((void(*)())xsltGlobalsCleanupFunc)();
#endif
free(gs); //using xmlFree(gs) is not right: GS was not initialized with xmlMalloc() !
xeSetTLS(NULL);
}
XMLPUBFUNEXPORT int xmlOOMFlag()
{
LOAD_GS_DIRECT
#ifdef _DEBUG
int f = OOM_FLAG;
if(f)
{
f |= 0; // SET BREAKPOINT HERE
}
return f;
#else
return OOM_FLAG;
#endif
}
void XMLCALL xeCheckErrno()
{
int err = errno;
if (err == ENOMEM)
{
SET_OOM_FLAG;
}
#ifdef _DEBUG
else if (err)
{
// some other error!!!
err ^=err;
}
#endif
}
XMLPUBFUNEXPORT void xmlSetOOM()
{
DEFINE_GS_PROXY //note: ensure GS proxy initialize before any GS member access
xmlGlobalStatePtr gs = xeGetTLS();
SET_GS_PROXY(gs)
// Should be sure that globals state (contains the OOM flag) is initialized
if(gs)
{
OOM_FLAG = 1;
}
}
XMLPUBFUNEXPORT void xmlResetOOM()
{
DEFINE_GS_PROXY //note: ensure GS proxy initialize before any GS member access
xmlGlobalStatePtr gs = xeGetTLS();
SET_GS_PROXY(gs)
// We need this in case OOM happened during initialization of the 'global state'
if (!gs)
return;
OOM_FLAG = 0;
}
#define __lookup_ALLOC_ADDRES_ 0
#ifdef XMLENGINE_MEM_DEBUG
void __catchAllocatedAddress()
{
// Set breakpoint here
}
void __catchFreedAddress()
{
// Set breakpoint here
}
#endif
#ifdef XMLENGINE_MEM_DEBUG
//#define XMLENGINE_MEM_DEBUG_SIZE
#endif
/*
NOTE: XMLENGINE_MEM_DEBUG option is defined only in debug builds
*/
XMLPUBFUNEXPORT void* XMLCALL malloc_impl(size_t size)
{
#ifdef XMLENGINE_MEM_DEBUG
LOAD_GS_DIRECT
#endif
#ifndef XMLENGINE_MEM_DEBUG_SIZE
void* mem = malloc(size);
#ifdef XMLENGINE_MEM_DEBUG
if((int)mem == __lookup_ALLOC_ADDRES_) {
__catchAllocatedAddress();
}
#endif
#else
// when defined XMLENGINE_MEM_DEBUG_SIZE
//
// the previous 4 bytes before returned pointer is the size of a block
void *hdr;
void *mem;
hdr = malloc(size + sizeof(size_t));
if(hdr)
{
mem = ((char*)hdr) + sizeof(size_t);
*((size_t*)hdr) = size;
}
else
mem = NULL;
if((int)hdr == __lookup_ALLOC_ADDRES_) {
__catchAllocatedAddress();
}
#endif
if(mem)
{
#ifdef XMLENGINE_MEM_DEBUG
xmlGlobalStatePtr gs = xeGetTLS();
if(gs && !xmlOOM) // do not count "after allocations" during error-handling
{
gs->allocCount++;
gs->allocTotal += size;
#ifdef XMLENGINE_MEM_DEBUG_SIZE
gs->allocMemSize += size;
if(gs->allocMemSize > gs->allocMemSizeMax)
gs->allocMemSizeMax = gs->allocMemSize;
#endif
}
#endif
return mem;
}
else
{
SET_OOM_FLAG;
return NULL; // NULL
}
}
XMLPUBFUNEXPORT void* XMLCALL realloc_impl(void *ptr, size_t size)
{
#ifdef XMLENGINE_MEM_DEBUG
LOAD_GS_DIRECT
#endif
#ifndef XMLENGINE_MEM_DEBUG_SIZE
void* mem = realloc(ptr, size);
# ifdef XMLENGINE_MEM_DEBUG
if((int)mem == __lookup_ALLOC_ADDRES_) {
__catchAllocatedAddress();
}
# endif
#else
// XMLENGINE_MEM_DEBUG_SIZE is defined
void* hdr;
void* mem;
size_t prevSize;
hdr = (((size_t*)ptr) - 1);
prevSize = *((size_t*)hdr);
hdr = realloc(hdr, size + sizeof(size_t));
if(hdr)
{
mem = ((size_t*)hdr) + 1;
*((size_t*)hdr) = size;
}
else
mem = NULL;
if((int)hdr == __lookup_ALLOC_ADDRES_) {
__catchAllocatedAddress();
}
#endif /* XMLENGINE_MEM_DEBUG_SIZE */
if(mem)
{
#ifdef XMLENGINE_MEM_DEBUG
xmlGlobalStatePtr gs = xeGetTLS();
if(gs && !xmlOOM) // do not count "after allocations" during error-handling
{
gs->reallocCount++;
#ifdef XMLENGINE_MEM_DEBUG_SIZE
gs->allocMemSize += size - prevSize;
if(gs->allocMemSize > gs->allocMemSizeMax)
gs->allocMemSizeMax = gs->allocMemSize;
#endif
}
#endif
return mem;
}
else
{
SET_OOM_FLAG;
return NULL;
}
}
//
// NOTE: in release builds free() is used directly
void free_debug(void* mem)
{
#ifdef XMLENGINE_MEM_DEBUG
xmlGlobalStatePtr gs;
#ifndef XMLENGINE_MEM_DEBUG_SIZE
if((int)mem == __lookup_ALLOC_ADDRES_) {
__catchFreedAddress();
}
free(mem);
#else
void* hdr;
size_t size;
hdr = (((size_t*)mem) - 1);
if((int)hdr == __lookup_ALLOC_ADDRES_) {
__catchFreedAddress();
}
size = *((size_t*)hdr);
free(hdr);
#endif /* XMLENGINE_MEM_DEBUG_SIZE */
gs = xeGetTLS();
if(gs)
{
gs->deallocCount++;
#ifdef XMLENGINE_MEM_DEBUG_SIZE
gs->allocMemSize -=size;
#endif
}
#endif /* XMLENGINE_MEM_DEBUG */
}
//
#ifdef XMLENGINE_EXCLUDE_EMBED_MSG
const char* const __embedded_errtxt_replacement = "DISABLED ERROR STRING\n";
#endif
void xeCleanupDOMStringConverter()
{
DOMStringConverterData* data = &xmlGetGlobalState()->xeStringArgs;
char** buf;
int i;
for(i=0; i<4; i++){
buf = &data->cleanupItem[i];
if(*buf){
xmlFree(*buf);
*buf = 0;
}
}
}
int symbian_vsnprintf(char *str, size_t size, const char *format, va_list ap)
{
int ret = 0;
ret = vsprintf(str, format, ap);
assert((size_t)ret < size);
return ret;
}
int symbian_snprintf(char *str, size_t size, const char *format, ...)
{
int ret = 0;
va_list args;
va_start(args, format);
symbian_vsnprintf(str, size, format, args);
va_end(args);
assert((size_t)ret < size);
return ret;
}
#include <stdapis/libxml2/libxml2_sax.h>
/**
* xmlTreeIndentString:
*
* The string used to do one-level indent. By default is equal to " " (two spaces)
*/
XMLPUBFUNEXPORT const char* const xmlTreeIndentString = " ";
const char* const xmlTreeIndentStringThrDef = " ";
XMLPUBFUNEXPORT xmlRegisterNodeFunc
xmlRegisterNodeDefault(xmlRegisterNodeFunc func)
{
LOAD_GS_DIRECT
xmlRegisterNodeFunc old = xmlRegisterNodeDefaultValue;
__xmlRegisterCallbacks = 1;
xmlRegisterNodeDefaultValue = func;
return(old);
}
XMLPUBFUNEXPORT xmlDeregisterNodeFunc
xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func)
{
LOAD_GS_DIRECT
xmlDeregisterNodeFunc old = xmlDeregisterNodeDefaultValue;
__xmlRegisterCallbacks = 1;
xmlDeregisterNodeDefaultValue = func;
return(old);
}
#define xmlBufferAllocSchemeThrDef XML_BUFFER_ALLOC_EXACT
#define xmlDefaultBufferSizeThrDef BASE_BUFFER_SIZE
#define xmlParserDebugEntitiesThrDef 0
#define xmlDoValidityCheckingDefaultValueThrDef 0
#define xmlGetWarningsDefaultValueThrDef 1
#define xmlLoadExtDtdDefaultValueThrDef 0
#define xmlPedanticParserDefaultValueThrDef 0
#define xmlLineNumbersDefaultValueThrDef 0
#define xmlKeepBlanksDefaultValueThrDef 1
#define xmlSubstituteEntitiesDefaultValueThrDef 0
#define xmlRegisterNodeDefaultValueThrDef NULL
#define xmlDeregisterNodeDefaultValueThrDef NULL
void xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED, const char *msg, ...);
#define xmlGenericErrorThrDef xmlGenericErrorDefaultFunc
#define xmlStructuredErrorThrDef NULL
#define xmlGenericErrorContextThrDef NULL
#define xmlIndentTreeOutputThrDef 1
#define xmlTreeIndentStringThrDef " "
#define xmlSaveNoEmptyTagsThrDef 0
#undef docbDefaultSAXHandler
#undef htmlDefaultSAXHandler
#undef xmlBufferAllocScheme
#undef xmlDefaultBufferSize
#undef xmlDefaultSAXHandler
#undef xmlDefaultSAXLocator
#undef xmlDoValidityCheckingDefaultValue
#undef xmlGenericError
#undef xmlStructuredError
#undef xmlGenericErrorContext
#undef xmlGetWarningsDefaultValue
#undef xmlIndentTreeOutput
//#undef xmlTreeIndentString
#undef xmlKeepBlanksDefaultValue
#undef xmlLineNumbersDefaultValue
#undef xmlLoadExtDtdDefaultValue
#undef xmlParserDebugEntities
#undef xmlPedanticParserDefaultValue
#undef xmlSaveNoEmptyTags
#undef xmlSubstituteEntitiesDefaultValue
#undef xmlRegisterNodeDefaultValue
#undef xmlDeregisterNodeDefaultValue
#undef xmlLastError
#undef xmlFree
#undef xmlMalloc
#undef xmlMallocAtomic
#undef xmlMemStrdup
#undef xmlRealloc
/* html */
#undef htmlStartCloseIndex
#undef htmlStartCloseIndexinitialized
/* tree */
#undef __xmlRegisterCallbacks
#undef xmlCompressMode
#undef xmlCheckDTD
/* xmlmemory */
#undef xmlMemInitialized
#undef debugMemSize
#undef debugMaxMemSize
#undef xmlMemMutex
#undef g_block
#undef xmlMemStopAtBlock
#undef xmlMemTraceBlockAt
/* catalog */
#undef xmlDebugCatalogs
#undef xmlCatalogDefaultAllow
#undef xmlCatalogDefaultPrefer
#undef xmlCatalogXMLFiles
#undef xmlDefaultCatalog
#undef xmlCatalogMutex
#undef xmlCatalogInitialized
#undef xmlInputCallbackTable
#undef xmlInputCallbackNr
#undef xmlInputCallbackInitialized
#undef xmlOutputCallbackTable
#undef xmlOutputCallbackNr
#undef xmlOutputCallbackInitialized
#undef xmlCurrentExternalEntityLoader
#undef xmlSAX2DefaultVersionValue
#undef xmlParserMaxDepth
#undef xmlW3CPIs
#undef xmlParserInitialized
#undef xeStackLimit
// Now these are global constants
//#undef xmlEntityLt
//#undef xmlEntityGt
//#undef xmlEntityAmp
//#undef xmlEntityQuot
//#undef xmlEntityApos
#undef xmlUTF16LEHandler
#undef xmlUTF16BEHandler
#undef xmlCharEncodingAliases
#undef xmlCharEncodingAliasesNb
#undef xmlCharEncodingAliasesMax
#undef xmlLittleEndian
#undef handlers
#undef nbCharEncodingHandler
#undef xmlDefaultCharEncodingHandler
#undef xmlXPathNAN
#undef xmlXPathPINF
#undef xmlXPathNINF
#undef xmlXPathNZERO
#undef xmlXPathInitialized
#ifndef LIBXML_THREAD_ENABLED
# undef xmlXPathDisableOptimizer
#endif
#undef xmlXPathDefineExtensionFunctionsGlobally
#undef xmlXPathDefaultFunctionsHash
#undef xmlXPathIntermediaryExtensionFunctionsHash
#undef xlinkDefaultHandler
#undef xlinkDefaultDetect
#undef had_info
#undef xmlInputStreamId
#undef xeUserCount
/* XMLENGINE_XSLT */
#undef g_calibration
//#undef default_token
#undef xsltExtensionsHash
#undef xsltFunctionsHash
#undef xsltElementsHash
#undef xsltGlobalsCleanupFunc
#undef xsltTopLevelsHash
#undef xsltDebuggerCurrentCallbacks
#ifdef LIBXML_SAX1_ENABLED
/**
* xmlDefaultSAXHandler:
*
* Default SAX version1 handler for XML, builds the DOM tree
*/
const 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}
*/
const xmlSAXLocator xmlDefaultSAXLocator = {
xmlSAX2GetPublicId,
xmlSAX2GetSystemId,
xmlSAX2GetLineNumber,
xmlSAX2GetColumnNumber
};
#ifdef LIBXML_HTML_ENABLED
/**
* htmlDefaultSAXHandler:
*
* Default old SAX v1 handler for HTML, builds the DOM tree
*/
const xmlSAXHandlerV1 htmlDefaultSAXHandler = {
xmlSAX2InternalSubset,
NULL,
NULL,
NULL,
NULL,
xmlSAX2GetEntity,
NULL,
NULL,
NULL,
NULL,
NULL,
xmlSAX2SetDocumentLocator,
xmlSAX2StartDocument,
xmlSAX2EndDocument,
xmlSAX2StartElement,
xmlSAX2EndElement,
NULL,
xmlSAX2Characters,
xmlSAX2IgnorableWhitespace,
NULL,
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
*/
const 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:
* @param gs a pointer to a newly allocated global state
*
* xmlInitializeGlobalState() initialize a global state with all the
* default values of the library.
*/
XMLPUBFUNEXPORT 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);
#ifdef LIBXML_DOCB_ENABLED
xmlSAX2InitDocbDefaultSAXHandler(&gs->docbDefaultSAXHandler);
#endif
#ifdef LIBXML_HTML_ENABLED
//xmlSAX2InitHtmlDefaultSAXHandler(&gs->htmlDefaultSAXHandler);
#endif
// merge: agathe: I had removed this code for libxslt...
//#ifdef LIBXML_DOCB_ENABLED
// initdocbDefaultSAXHandler(&gs->docbDefaultSAXHandler);
//#endif
//#ifdef LIBXML_HTML_ENABLED
//inithtmlDefaultSAXHandler(&gs->htmlDefaultSAXHandler);
//#endif
gs->xmlBufferAllocScheme = xmlBufferAllocSchemeThrDef;
gs->xmlDefaultBufferSize = xmlDefaultBufferSizeThrDef;
#ifdef LIBXML_SAX1_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;
gs->xeStackLimit = xeStackLimitAddress();
gs->xmlGetWarningsDefaultValue = xmlGetWarningsDefaultValueThrDef;
gs->xmlIndentTreeOutput = xmlIndentTreeOutputThrDef;
gs->xmlKeepBlanksDefaultValue = xmlKeepBlanksDefaultValueThrDef;
#ifdef LIBXML_ENABLE_NODE_LINEINFO
gs->xmlLineNumbersDefaultValue = xmlLineNumbersDefaultValueThrDef;
#endif
gs->xmlLoadExtDtdDefaultValue = xmlLoadExtDtdDefaultValueThrDef;
gs->xmlParserDebugEntities = xmlParserDebugEntitiesThrDef;
gs->xmlPedanticParserDefaultValue = xmlPedanticParserDefaultValueThrDef;
gs->xmlSaveNoEmptyTags = xmlSaveNoEmptyTagsThrDef;
gs->xmlSubstituteEntitiesDefaultValue = xmlSubstituteEntitiesDefaultValueThrDef;
gs->xmlGenericError = xmlGenericErrorThrDef;
gs->xmlStructuredError = xmlStructuredErrorThrDef;
gs->xmlGenericErrorContext = xmlGenericErrorContextThrDef;
gs->xmlRegisterNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef;
gs->xmlDeregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef;
memset(&gs->xmlLastError, 0, sizeof(xmlError));
// ==================================================
// XMLENEGINE: NOTE: All zero values are commented,
// since the whole structure is set to zeros prior
// initialization
// ==================================================
// gs->had_info = 0;
// gs->xmlInputStreamId = 0;
// gs->xmlUTF16LEHandler = NULL;
// gs->xmlUTF16BEHandler = NULL;
// gs->xmlCharEncodingAliases = NULL;
// gs->xmlCharEncodingAliasesNb = 0;
// gs->xmlCharEncodingAliasesMax = 0;
gs->xmlLittleEndian = 1;
// gs->handlers = NULL;
// gs->nbCharEncodingHandler = 0;
// gs->xmlDefaultCharEncodingHandler = NULL;
gs->xmlParserMaxDepth = 1024;
gs->xmlW3CPIs[0] = "xml-stylesheet";
gs->xmlW3CPIs[1] = NULL;
// gs->xmlParserInitialized = 0;
gs->xmlSAX2DefaultVersionValue = 2;
// gs->xmlInputCallbackNr = 0;
// gs->xmlInputCallbackInitialized = 0;
#ifdef LIBXML_OUTPUT_ENABLED
// gs->xmlOutputCallbackNr = 0;
// gs->xmlOutputCallbackInitialized = 0;
#endif /* LIBXML_OUTPUT_ENABLED*/
gs->xmlCurrentExternalEntityLoader = xmlDefaultExternalEntityLoader;
// gs->xmlMemInitialized = 0;
// gs->debugMemSize = 0;
// gs->debugMaxMemSize = 0;
// gs->xmlMemMutex = NULL;
// gs->block = 0;
// gs->xmlMemStopAtBlock = 0;
// gs->xmlMemTraceBlockAt = NULL;
//#ifdef LIBXML_TREE_ENABLED
// gs->__xmlRegisterCallbacks = 0;
//#endif
#ifdef LIBXML_TREE_ENABLED
// gs->xmlCompressMode = 0;
gs->xmlCheckDTD = 1;
#endif
#ifdef LIBXML_CATALOG_ENABLED
// gs->xmlDebugCatalogs = 0;
gs->xmlCatalogDefaultAllow = XML_CATA_ALLOW_ALL;
gs->xmlCatalogDefaultPrefer = XML_CATA_PREFER_PUBLIC;
// gs->xmlCatalogXMLFiles = NULL;
// gs->xmlDefaultCatalog = NULL;
// xmlCatalogMutex = NULL;
// gs->xmlCatalogInitialized = 0;
#endif
#ifdef LIBXML_XPATH_ENABLED
// gs->xmlXPathNAN = 0;
gs->xmlXPathPINF = 1;
gs->xmlXPathNINF = -1;
// gs->xmlXPathNZERO = 0;
// gs->xmlXPathInitialized = 0;
#ifndef LIBXML_THREAD_ENABLED
// gs->xmlXPathDisableOptimizer = 0;
#endif
gs->xmlXPathDefineExtensionFunctionsGlobally = 1;
// gs->xmlXPathDefaultFunctionsHash = NULL;
// gs->xmlXPathIntermediaryExtensionFunctionsHash = NULL;
#endif /* LIBXML_XPATH_ENABLED */
#ifdef LIBXML_XPTR_ENABLED
// gs->xlinkDefaultHandler = NULL;
// gs->xlinkDefaultDetect = NULL;
#endif
xmlMutexUnlock(xmlThrDefMutex);
// gs->xmlOOM = gs->xeUserCount = 0; //
}