xml/libxml2libs/src/libxml2/libxml2_globals.c
changeset 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/libxml2libs/src/libxml2/libxml2_globals.c	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,852 @@
+/*
+ * 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; //
+}