• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * globals.c: definition and handling of the set of global variables
3  *            of the library
4  *
5  * The bottom of this file is automatically generated by build_glob.py
6  * based on the description file global.data
7  *
8  * See Copyright for the status of this software.
9  *
10  * Gary Pennington <Gary.Pennington@uk.sun.com>
11  * daniel@veillard.com
12  */
13 
14 #define IN_LIBXML
15 #include "libxml.h"
16 
17 #ifdef HAVE_STDLIB_H
18 #include <stdlib.h>
19 #endif
20 #include <string.h>
21 
22 #include <libxml/globals.h>
23 #include <libxml/xmlmemory.h>
24 #include <libxml/threads.h>
25 
26 /* #define DEBUG_GLOBALS */
27 
28 /*
29  * Helpful Macro
30  */
31 #ifdef LIBXML_THREAD_ENABLED
32 #define IS_MAIN_THREAD (xmlIsMainThread())
33 #else
34 #define IS_MAIN_THREAD 1
35 #endif
36 
37 /*
38  * Mutex to protect "ForNewThreads" variables
39  */
40 static xmlMutexPtr xmlThrDefMutex = NULL;
41 
42 /**
43  * xmlInitGlobals:
44  *
45  * Additional initialisation for multi-threading
46  */
xmlInitGlobals(void)47 void xmlInitGlobals(void)
48 {
49     xmlThrDefMutex = xmlNewMutex();
50 }
51 
52 /**
53  * xmlCleanupGlobals:
54  *
55  * Additional cleanup for multi-threading
56  */
xmlCleanupGlobals(void)57 void xmlCleanupGlobals(void)
58 {
59     if (xmlThrDefMutex != NULL) {
60 	xmlFreeMutex(xmlThrDefMutex);
61 	xmlThrDefMutex = NULL;
62     }
63     __xmlGlobalInitMutexDestroy();
64 }
65 
66 /************************************************************************
67  * 									*
68  *	All the user accessible global variables of the library		*
69  * 									*
70  ************************************************************************/
71 
72 /*
73  * Memory allocation routines
74  */
75 #undef	xmlFree
76 #undef	xmlMalloc
77 #undef	xmlMallocAtomic
78 #undef	xmlMemStrdup
79 #undef	xmlRealloc
80 
81 #if defined(DEBUG_MEMORY_LOCATION) || defined(DEBUG_MEMORY)
82 xmlFreeFunc xmlFree = (xmlFreeFunc) xmlMemFree;
83 xmlMallocFunc xmlMalloc = (xmlMallocFunc) xmlMemMalloc;
84 xmlMallocFunc xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc;
85 xmlReallocFunc xmlRealloc = (xmlReallocFunc) xmlMemRealloc;
86 xmlStrdupFunc xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup;
87 #else
88 /**
89  * xmlFree:
90  * @mem: an already allocated block of memory
91  *
92  * The variable holding the libxml free() implementation
93  */
94 xmlFreeFunc xmlFree = (xmlFreeFunc) free;
95 /**
96  * xmlMalloc:
97  * @size:  the size requested in bytes
98  *
99  * The variable holding the libxml malloc() implementation
100  *
101  * Returns a pointer to the newly allocated block or NULL in case of error
102  */
103 xmlMallocFunc xmlMalloc = (xmlMallocFunc) malloc;
104 /**
105  * xmlMallocAtomic:
106  * @size:  the size requested in bytes
107  *
108  * The variable holding the libxml malloc() implementation for atomic
109  * data (i.e. blocks not containings pointers), useful when using a
110  * garbage collecting allocator.
111  *
112  * Returns a pointer to the newly allocated block or NULL in case of error
113  */
114 xmlMallocFunc xmlMallocAtomic = (xmlMallocFunc) malloc;
115 /**
116  * xmlRealloc:
117  * @mem: an already allocated block of memory
118  * @size:  the new size requested in bytes
119  *
120  * The variable holding the libxml realloc() implementation
121  *
122  * Returns a pointer to the newly reallocated block or NULL in case of error
123  */
124 xmlReallocFunc xmlRealloc = (xmlReallocFunc) realloc;
125 /**
126  * xmlMemStrdup:
127  * @str: a zero terminated string
128  *
129  * The variable holding the libxml strdup() implementation
130  *
131  * Returns the copy of the string or NULL in case of error
132  */
133 xmlStrdupFunc xmlMemStrdup = (xmlStrdupFunc) xmlStrdup;
134 #endif /* DEBUG_MEMORY_LOCATION || DEBUG_MEMORY */
135 
136 #include <libxml/threads.h>
137 #include <libxml/globals.h>
138 #include <libxml/SAX.h>
139 
140 #undef	docbDefaultSAXHandler
141 #undef	htmlDefaultSAXHandler
142 #undef	oldXMLWDcompatibility
143 #undef	xmlBufferAllocScheme
144 #undef	xmlDefaultBufferSize
145 #undef	xmlDefaultSAXHandler
146 #undef	xmlDefaultSAXLocator
147 #undef	xmlDoValidityCheckingDefaultValue
148 #undef	xmlGenericError
149 #undef	xmlStructuredError
150 #undef	xmlGenericErrorContext
151 #undef	xmlGetWarningsDefaultValue
152 #undef	xmlIndentTreeOutput
153 #undef  xmlTreeIndentString
154 #undef	xmlKeepBlanksDefaultValue
155 #undef	xmlLineNumbersDefaultValue
156 #undef	xmlLoadExtDtdDefaultValue
157 #undef	xmlParserDebugEntities
158 #undef	xmlParserVersion
159 #undef	xmlPedanticParserDefaultValue
160 #undef	xmlSaveNoEmptyTags
161 #undef	xmlSubstituteEntitiesDefaultValue
162 #undef	xmlRegisterNodeDefaultValue
163 #undef	xmlDeregisterNodeDefaultValue
164 #undef	xmlLastError
165 
166 #undef  xmlParserInputBufferCreateFilenameValue
167 #undef  xmlOutputBufferCreateFilenameValue
168 /**
169  * xmlParserVersion:
170  *
171  * Constant string describing the internal version of the library
172  */
173 const char *xmlParserVersion = LIBXML_VERSION_STRING LIBXML_VERSION_EXTRA;
174 
175 /**
176  * xmlBufferAllocScheme:
177  *
178  * Global setting, default allocation policy for buffers, default is
179  * XML_BUFFER_ALLOC_EXACT
180  */
181 xmlBufferAllocationScheme xmlBufferAllocScheme = XML_BUFFER_ALLOC_EXACT;
182 static xmlBufferAllocationScheme xmlBufferAllocSchemeThrDef = XML_BUFFER_ALLOC_EXACT;
183 /**
184  * xmlDefaultBufferSize:
185  *
186  * Global setting, default buffer size. Default value is BASE_BUFFER_SIZE
187  */
188 int xmlDefaultBufferSize = BASE_BUFFER_SIZE;
189 static int xmlDefaultBufferSizeThrDef = BASE_BUFFER_SIZE;
190 
191 /*
192  * Parser defaults
193  */
194 
195 /**
196  * oldXMLWDcompatibility:
197  *
198  * Global setting, DEPRECATED.
199  */
200 int oldXMLWDcompatibility = 0; /* DEPRECATED */
201 /**
202  * xmlParserDebugEntities:
203  *
204  * Global setting, asking the parser to print out debugging informations.
205  * while handling entities.
206  * Disabled by default
207  */
208 int xmlParserDebugEntities = 0;
209 static int xmlParserDebugEntitiesThrDef = 0;
210 /**
211  * xmlDoValidityCheckingDefaultValue:
212  *
213  * Global setting, indicate that the parser should work in validating mode.
214  * Disabled by default.
215  */
216 int xmlDoValidityCheckingDefaultValue = 0;
217 static int xmlDoValidityCheckingDefaultValueThrDef = 0;
218 /**
219  * xmlGetWarningsDefaultValue:
220  *
221  * Global setting, indicate that the parser should provide warnings.
222  * Activated by default.
223  */
224 int xmlGetWarningsDefaultValue = 1;
225 static int xmlGetWarningsDefaultValueThrDef = 1;
226 /**
227  * xmlLoadExtDtdDefaultValue:
228  *
229  * Global setting, indicate that the parser should load DTD while not
230  * validating.
231  * Disabled by default.
232  */
233 int xmlLoadExtDtdDefaultValue = 0;
234 static int xmlLoadExtDtdDefaultValueThrDef = 0;
235 /**
236  * xmlPedanticParserDefaultValue:
237  *
238  * Global setting, indicate that the parser be pedantic
239  * Disabled by default.
240  */
241 int xmlPedanticParserDefaultValue = 0;
242 static int xmlPedanticParserDefaultValueThrDef = 0;
243 /**
244  * xmlLineNumbersDefaultValue:
245  *
246  * Global setting, indicate that the parser should store the line number
247  * in the content field of elements in the DOM tree.
248  * Disabled by default since this may not be safe for old classes of
249  * applicaton.
250  */
251 int xmlLineNumbersDefaultValue = 0;
252 static int xmlLineNumbersDefaultValueThrDef = 0;
253 /**
254  * xmlKeepBlanksDefaultValue:
255  *
256  * Global setting, indicate that the parser should keep all blanks
257  * nodes found in the content
258  * Activated by default, this is actually needed to have the parser
259  * conformant to the XML Recommendation, however the option is kept
260  * for some applications since this was libxml1 default behaviour.
261  */
262 int xmlKeepBlanksDefaultValue = 1;
263 static int xmlKeepBlanksDefaultValueThrDef = 1;
264 /**
265  * xmlSubstituteEntitiesDefaultValue:
266  *
267  * Global setting, indicate that the parser should not generate entity
268  * references but replace them with the actual content of the entity
269  * Disabled by default, this should be activated when using XPath since
270  * the XPath data model requires entities replacement and the XPath
271  * engine does not handle entities references transparently.
272  */
273 int xmlSubstituteEntitiesDefaultValue = 0;
274 static int xmlSubstituteEntitiesDefaultValueThrDef = 0;
275 
276 xmlRegisterNodeFunc xmlRegisterNodeDefaultValue = NULL;
277 static xmlRegisterNodeFunc xmlRegisterNodeDefaultValueThrDef = NULL;
278 xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue = NULL;
279 static xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValueThrDef = NULL;
280 
281 xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue = NULL;
282 static xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValueThrDef = NULL;
283 
284 xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue = NULL;
285 static xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValueThrDef = NULL;
286 
287 /*
288  * Error handling
289  */
290 
291 /* xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc; */
292 /* Must initialize xmlGenericError in xmlInitParser */
293 void XMLCDECL xmlGenericErrorDefaultFunc	(void *ctx ATTRIBUTE_UNUSED,
294 				 const char *msg,
295 				 ...);
296 /**
297  * xmlGenericError:
298  *
299  * Global setting: function used for generic error callbacks
300  */
301 xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc;
302 static xmlGenericErrorFunc xmlGenericErrorThrDef = xmlGenericErrorDefaultFunc;
303 /**
304  * xmlStructuredError:
305  *
306  * Global setting: function used for structured error callbacks
307  */
308 xmlStructuredErrorFunc xmlStructuredError = NULL;
309 static xmlStructuredErrorFunc xmlStructuredErrorThrDef = NULL;
310 /**
311  * xmlGenericErrorContext:
312  *
313  * Global setting passed to generic error callbacks
314  */
315 void *xmlGenericErrorContext = NULL;
316 static void *xmlGenericErrorContextThrDef = NULL;
317 xmlError xmlLastError;
318 
319 /*
320  * output defaults
321  */
322 /**
323  * xmlIndentTreeOutput:
324  *
325  * Global setting, asking the serializer to indent the output tree by default
326  * Enabled by default
327  */
328 int xmlIndentTreeOutput = 1;
329 static int xmlIndentTreeOutputThrDef = 1;
330 
331 /**
332  * xmlTreeIndentString:
333  *
334  * The string used to do one-level indent. By default is equal to "  " (two spaces)
335  */
336 const char *xmlTreeIndentString = "  ";
337 static const char *xmlTreeIndentStringThrDef = "  ";
338 
339 /**
340  * xmlSaveNoEmptyTags:
341  *
342  * Global setting, asking the serializer to not output empty tags
343  * as <empty/> but <empty></empty>. those two forms are undistinguishable
344  * once parsed.
345  * Disabled by default
346  */
347 int xmlSaveNoEmptyTags = 0;
348 static int xmlSaveNoEmptyTagsThrDef = 0;
349 
350 #ifdef LIBXML_SAX1_ENABLED
351 /**
352  * xmlDefaultSAXHandler:
353  *
354  * Default SAX version1 handler for XML, builds the DOM tree
355  */
356 xmlSAXHandlerV1 xmlDefaultSAXHandler = {
357     xmlSAX2InternalSubset,
358     xmlSAX2IsStandalone,
359     xmlSAX2HasInternalSubset,
360     xmlSAX2HasExternalSubset,
361     xmlSAX2ResolveEntity,
362     xmlSAX2GetEntity,
363     xmlSAX2EntityDecl,
364     xmlSAX2NotationDecl,
365     xmlSAX2AttributeDecl,
366     xmlSAX2ElementDecl,
367     xmlSAX2UnparsedEntityDecl,
368     xmlSAX2SetDocumentLocator,
369     xmlSAX2StartDocument,
370     xmlSAX2EndDocument,
371     xmlSAX2StartElement,
372     xmlSAX2EndElement,
373     xmlSAX2Reference,
374     xmlSAX2Characters,
375     xmlSAX2Characters,
376     xmlSAX2ProcessingInstruction,
377     xmlSAX2Comment,
378     xmlParserWarning,
379     xmlParserError,
380     xmlParserError,
381     xmlSAX2GetParameterEntity,
382     xmlSAX2CDataBlock,
383     xmlSAX2ExternalSubset,
384     0,
385 };
386 #endif /* LIBXML_SAX1_ENABLED */
387 
388 /**
389  * xmlDefaultSAXLocator:
390  *
391  * The default SAX Locator
392  * { getPublicId, getSystemId, getLineNumber, getColumnNumber}
393  */
394 xmlSAXLocator xmlDefaultSAXLocator = {
395     xmlSAX2GetPublicId,
396     xmlSAX2GetSystemId,
397     xmlSAX2GetLineNumber,
398     xmlSAX2GetColumnNumber
399 };
400 
401 #ifdef LIBXML_HTML_ENABLED
402 /**
403  * htmlDefaultSAXHandler:
404  *
405  * Default old SAX v1 handler for HTML, builds the DOM tree
406  */
407 xmlSAXHandlerV1 htmlDefaultSAXHandler = {
408     xmlSAX2InternalSubset,
409     NULL,
410     NULL,
411     NULL,
412     NULL,
413     xmlSAX2GetEntity,
414     NULL,
415     NULL,
416     NULL,
417     NULL,
418     NULL,
419     xmlSAX2SetDocumentLocator,
420     xmlSAX2StartDocument,
421     xmlSAX2EndDocument,
422     xmlSAX2StartElement,
423     xmlSAX2EndElement,
424     NULL,
425     xmlSAX2Characters,
426     xmlSAX2IgnorableWhitespace,
427     xmlSAX2ProcessingInstruction,
428     xmlSAX2Comment,
429     xmlParserWarning,
430     xmlParserError,
431     xmlParserError,
432     xmlSAX2GetParameterEntity,
433     xmlSAX2CDataBlock,
434     NULL,
435     0,
436 };
437 #endif /* LIBXML_HTML_ENABLED */
438 
439 #ifdef LIBXML_DOCB_ENABLED
440 /**
441  * docbDefaultSAXHandler:
442  *
443  * Default old SAX v1 handler for SGML DocBook, builds the DOM tree
444  */
445 xmlSAXHandlerV1 docbDefaultSAXHandler = {
446     xmlSAX2InternalSubset,
447     xmlSAX2IsStandalone,
448     xmlSAX2HasInternalSubset,
449     xmlSAX2HasExternalSubset,
450     xmlSAX2ResolveEntity,
451     xmlSAX2GetEntity,
452     xmlSAX2EntityDecl,
453     NULL,
454     NULL,
455     NULL,
456     NULL,
457     xmlSAX2SetDocumentLocator,
458     xmlSAX2StartDocument,
459     xmlSAX2EndDocument,
460     xmlSAX2StartElement,
461     xmlSAX2EndElement,
462     xmlSAX2Reference,
463     xmlSAX2Characters,
464     xmlSAX2IgnorableWhitespace,
465     NULL,
466     xmlSAX2Comment,
467     xmlParserWarning,
468     xmlParserError,
469     xmlParserError,
470     xmlSAX2GetParameterEntity,
471     NULL,
472     NULL,
473     0,
474 };
475 #endif /* LIBXML_DOCB_ENABLED */
476 
477 /**
478  * xmlInitializeGlobalState:
479  * @gs: a pointer to a newly allocated global state
480  *
481  * xmlInitializeGlobalState() initialize a global state with all the
482  * default values of the library.
483  */
484 void
xmlInitializeGlobalState(xmlGlobalStatePtr gs)485 xmlInitializeGlobalState(xmlGlobalStatePtr gs)
486 {
487 #ifdef DEBUG_GLOBALS
488     fprintf(stderr, "Initializing globals at %lu for thread %d\n",
489 	    (unsigned long) gs, xmlGetThreadId());
490 #endif
491 
492     /*
493      * Perform initialization as required by libxml
494      */
495     if (xmlThrDefMutex == NULL)
496         xmlInitGlobals();
497 
498     xmlMutexLock(xmlThrDefMutex);
499 
500 #if defined(LIBXML_DOCB_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED)
501     initdocbDefaultSAXHandler(&gs->docbDefaultSAXHandler);
502 #endif
503 #if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_LEGACY_ENABLED)
504     inithtmlDefaultSAXHandler(&gs->htmlDefaultSAXHandler);
505 #endif
506 
507     gs->oldXMLWDcompatibility = 0;
508     gs->xmlBufferAllocScheme = xmlBufferAllocSchemeThrDef;
509     gs->xmlDefaultBufferSize = xmlDefaultBufferSizeThrDef;
510 #if defined(LIBXML_SAX1_ENABLED) && defined(LIBXML_LEGACY_ENABLED)
511     initxmlDefaultSAXHandler(&gs->xmlDefaultSAXHandler, 1);
512 #endif /* LIBXML_SAX1_ENABLED */
513     gs->xmlDefaultSAXLocator.getPublicId = xmlSAX2GetPublicId;
514     gs->xmlDefaultSAXLocator.getSystemId = xmlSAX2GetSystemId;
515     gs->xmlDefaultSAXLocator.getLineNumber = xmlSAX2GetLineNumber;
516     gs->xmlDefaultSAXLocator.getColumnNumber = xmlSAX2GetColumnNumber;
517     gs->xmlDoValidityCheckingDefaultValue =
518          xmlDoValidityCheckingDefaultValueThrDef;
519 #if defined(DEBUG_MEMORY_LOCATION) | defined(DEBUG_MEMORY)
520     gs->xmlFree = (xmlFreeFunc) xmlMemFree;
521     gs->xmlMalloc = (xmlMallocFunc) xmlMemMalloc;
522     gs->xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc;
523     gs->xmlRealloc = (xmlReallocFunc) xmlMemRealloc;
524     gs->xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup;
525 #else
526     gs->xmlFree = (xmlFreeFunc) free;
527     gs->xmlMalloc = (xmlMallocFunc) malloc;
528     gs->xmlMallocAtomic = (xmlMallocFunc) malloc;
529     gs->xmlRealloc = (xmlReallocFunc) realloc;
530     gs->xmlMemStrdup = (xmlStrdupFunc) xmlStrdup;
531 #endif
532     gs->xmlGetWarningsDefaultValue = xmlGetWarningsDefaultValueThrDef;
533     gs->xmlIndentTreeOutput = xmlIndentTreeOutputThrDef;
534     gs->xmlTreeIndentString = xmlTreeIndentStringThrDef;
535     gs->xmlKeepBlanksDefaultValue = xmlKeepBlanksDefaultValueThrDef;
536     gs->xmlLineNumbersDefaultValue = xmlLineNumbersDefaultValueThrDef;
537     gs->xmlLoadExtDtdDefaultValue = xmlLoadExtDtdDefaultValueThrDef;
538     gs->xmlParserDebugEntities = xmlParserDebugEntitiesThrDef;
539     gs->xmlParserVersion = LIBXML_VERSION_STRING;
540     gs->xmlPedanticParserDefaultValue = xmlPedanticParserDefaultValueThrDef;
541     gs->xmlSaveNoEmptyTags = xmlSaveNoEmptyTagsThrDef;
542     gs->xmlSubstituteEntitiesDefaultValue =
543         xmlSubstituteEntitiesDefaultValueThrDef;
544 
545     gs->xmlGenericError = xmlGenericErrorThrDef;
546     gs->xmlStructuredError = xmlStructuredErrorThrDef;
547     gs->xmlGenericErrorContext = xmlGenericErrorContextThrDef;
548     gs->xmlRegisterNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef;
549     gs->xmlDeregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef;
550 
551 	gs->xmlParserInputBufferCreateFilenameValue = xmlParserInputBufferCreateFilenameValueThrDef;
552 	gs->xmlOutputBufferCreateFilenameValue = xmlOutputBufferCreateFilenameValueThrDef;
553     memset(&gs->xmlLastError, 0, sizeof(xmlError));
554 
555     xmlMutexUnlock(xmlThrDefMutex);
556 }
557 
558 /**
559  * DOC_DISABLE : we ignore missing doc for the xmlThrDef functions,
560  *               those are really internal work
561  */
562 void
xmlThrDefSetGenericErrorFunc(void * ctx,xmlGenericErrorFunc handler)563 xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler) {
564     xmlMutexLock(xmlThrDefMutex);
565     xmlGenericErrorContextThrDef = ctx;
566     if (handler != NULL)
567 	xmlGenericErrorThrDef = handler;
568     else
569 	xmlGenericErrorThrDef = xmlGenericErrorDefaultFunc;
570     xmlMutexUnlock(xmlThrDefMutex);
571 }
572 
573 void
xmlThrDefSetStructuredErrorFunc(void * ctx,xmlStructuredErrorFunc handler)574 xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) {
575     xmlMutexLock(xmlThrDefMutex);
576     xmlGenericErrorContextThrDef = ctx;
577     xmlStructuredErrorThrDef = handler;
578     xmlMutexUnlock(xmlThrDefMutex);
579 }
580 
581 /**
582  * xmlRegisterNodeDefault:
583  * @func: function pointer to the new RegisterNodeFunc
584  *
585  * Registers a callback for node creation
586  *
587  * Returns the old value of the registration function
588  */
589 xmlRegisterNodeFunc
xmlRegisterNodeDefault(xmlRegisterNodeFunc func)590 xmlRegisterNodeDefault(xmlRegisterNodeFunc func)
591 {
592     xmlRegisterNodeFunc old = xmlRegisterNodeDefaultValue;
593 
594     __xmlRegisterCallbacks = 1;
595     xmlRegisterNodeDefaultValue = func;
596     return(old);
597 }
598 
599 xmlRegisterNodeFunc
xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func)600 xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func)
601 {
602     xmlRegisterNodeFunc old;
603 
604     xmlMutexLock(xmlThrDefMutex);
605     old = xmlRegisterNodeDefaultValueThrDef;
606 
607     __xmlRegisterCallbacks = 1;
608     xmlRegisterNodeDefaultValueThrDef = func;
609     xmlMutexUnlock(xmlThrDefMutex);
610 
611     return(old);
612 }
613 
614 /**
615  * xmlDeregisterNodeDefault:
616  * @func: function pointer to the new DeregisterNodeFunc
617  *
618  * Registers a callback for node destruction
619  *
620  * Returns the previous value of the deregistration function
621  */
622 xmlDeregisterNodeFunc
xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func)623 xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func)
624 {
625     xmlDeregisterNodeFunc old = xmlDeregisterNodeDefaultValue;
626 
627     __xmlRegisterCallbacks = 1;
628     xmlDeregisterNodeDefaultValue = func;
629     return(old);
630 }
631 
632 xmlDeregisterNodeFunc
xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func)633 xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func)
634 {
635     xmlDeregisterNodeFunc old;
636 
637     xmlMutexLock(xmlThrDefMutex);
638     old = xmlDeregisterNodeDefaultValueThrDef;
639 
640     __xmlRegisterCallbacks = 1;
641     xmlDeregisterNodeDefaultValueThrDef = func;
642     xmlMutexUnlock(xmlThrDefMutex);
643 
644     return(old);
645 }
646 
647 xmlParserInputBufferCreateFilenameFunc
xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func)648 xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func)
649 {
650     xmlParserInputBufferCreateFilenameFunc old;
651 
652     xmlMutexLock(xmlThrDefMutex);
653     old = xmlParserInputBufferCreateFilenameValueThrDef;
654     if (old == NULL) {
655 		old = __xmlParserInputBufferCreateFilename;
656 	}
657 
658     xmlParserInputBufferCreateFilenameValueThrDef = func;
659     xmlMutexUnlock(xmlThrDefMutex);
660 
661     return(old);
662 }
663 
664 xmlOutputBufferCreateFilenameFunc
xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func)665 xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func)
666 {
667     xmlOutputBufferCreateFilenameFunc old;
668 
669     xmlMutexLock(xmlThrDefMutex);
670     old = xmlOutputBufferCreateFilenameValueThrDef;
671 #ifdef LIBXML_OUTPUT_ENABLED
672     if (old == NULL) {
673 		old = __xmlOutputBufferCreateFilename;
674 	}
675 #endif
676     xmlOutputBufferCreateFilenameValueThrDef = func;
677     xmlMutexUnlock(xmlThrDefMutex);
678 
679     return(old);
680 }
681 
682 #ifdef LIBXML_DOCB_ENABLED
683 #undef	docbDefaultSAXHandler
684 xmlSAXHandlerV1 *
__docbDefaultSAXHandler(void)685 __docbDefaultSAXHandler(void) {
686     if (IS_MAIN_THREAD)
687 	return (&docbDefaultSAXHandler);
688     else
689 	return (&xmlGetGlobalState()->docbDefaultSAXHandler);
690 }
691 #endif
692 
693 #ifdef LIBXML_HTML_ENABLED
694 #undef	htmlDefaultSAXHandler
695 xmlSAXHandlerV1 *
__htmlDefaultSAXHandler(void)696 __htmlDefaultSAXHandler(void) {
697     if (IS_MAIN_THREAD)
698 	return (&htmlDefaultSAXHandler);
699     else
700 	return (&xmlGetGlobalState()->htmlDefaultSAXHandler);
701 }
702 #endif
703 
704 #undef xmlLastError
705 xmlError *
__xmlLastError(void)706 __xmlLastError(void) {
707     if (IS_MAIN_THREAD)
708 	return (&xmlLastError);
709     else
710 	return (&xmlGetGlobalState()->xmlLastError);
711 }
712 
713 /*
714  * The following memory routines were apparently lost at some point,
715  * and were re-inserted at this point on June 10, 2004.  Hope it's
716  * the right place for them :-)
717  */
718 #if defined(LIBXML_THREAD_ALLOC_ENABLED) && defined(LIBXML_THREAD_ENABLED)
719 #undef xmlMalloc
720 xmlMallocFunc *
__xmlMalloc(void)721 __xmlMalloc(void){
722     if (IS_MAIN_THREAD)
723         return (&xmlMalloc);
724     else
725     	return (&xmlGetGlobalState()->xmlMalloc);
726 }
727 
728 #undef xmlMallocAtomic
729 xmlMallocFunc *
__xmlMallocAtomic(void)730 __xmlMallocAtomic(void){
731     if (IS_MAIN_THREAD)
732         return (&xmlMallocAtomic);
733     else
734         return (&xmlGetGlobalState()->xmlMallocAtomic);
735 }
736 
737 #undef xmlRealloc
738 xmlReallocFunc *
__xmlRealloc(void)739 __xmlRealloc(void){
740     if (IS_MAIN_THREAD)
741         return (&xmlRealloc);
742     else
743         return (&xmlGetGlobalState()->xmlRealloc);
744 }
745 
746 #undef xmlFree
747 xmlFreeFunc *
__xmlFree(void)748 __xmlFree(void){
749     if (IS_MAIN_THREAD)
750         return (&xmlFree);
751     else
752         return (&xmlGetGlobalState()->xmlFree);
753 }
754 
755 xmlStrdupFunc *
__xmlMemStrdup(void)756 __xmlMemStrdup(void){
757     if (IS_MAIN_THREAD)
758         return (&xmlMemStrdup);
759     else
760         return (&xmlGetGlobalState()->xmlMemStrdup);
761 }
762 
763 #endif
764 
765 /*
766  * Everything starting from the line below is
767  * Automatically generated by build_glob.py.
768  * Do not modify the previous line.
769  */
770 
771 
772 #undef	oldXMLWDcompatibility
773 int *
__oldXMLWDcompatibility(void)774 __oldXMLWDcompatibility(void) {
775     if (IS_MAIN_THREAD)
776 	return (&oldXMLWDcompatibility);
777     else
778 	return (&xmlGetGlobalState()->oldXMLWDcompatibility);
779 }
780 
781 #undef	xmlBufferAllocScheme
782 xmlBufferAllocationScheme *
__xmlBufferAllocScheme(void)783 __xmlBufferAllocScheme(void) {
784     if (IS_MAIN_THREAD)
785 	return (&xmlBufferAllocScheme);
786     else
787 	return (&xmlGetGlobalState()->xmlBufferAllocScheme);
788 }
xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v)789 xmlBufferAllocationScheme xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v) {
790     xmlBufferAllocationScheme ret;
791     xmlMutexLock(xmlThrDefMutex);
792     ret = xmlBufferAllocSchemeThrDef;
793     xmlBufferAllocSchemeThrDef = v;
794     xmlMutexUnlock(xmlThrDefMutex);
795     return ret;
796 }
797 
798 #undef	xmlDefaultBufferSize
799 int *
__xmlDefaultBufferSize(void)800 __xmlDefaultBufferSize(void) {
801     if (IS_MAIN_THREAD)
802 	return (&xmlDefaultBufferSize);
803     else
804 	return (&xmlGetGlobalState()->xmlDefaultBufferSize);
805 }
xmlThrDefDefaultBufferSize(int v)806 int xmlThrDefDefaultBufferSize(int v) {
807     int ret;
808     xmlMutexLock(xmlThrDefMutex);
809     ret = xmlDefaultBufferSizeThrDef;
810     xmlDefaultBufferSizeThrDef = v;
811     xmlMutexUnlock(xmlThrDefMutex);
812     return ret;
813 }
814 
815 #ifdef LIBXML_SAX1_ENABLED
816 #undef	xmlDefaultSAXHandler
817 xmlSAXHandlerV1 *
__xmlDefaultSAXHandler(void)818 __xmlDefaultSAXHandler(void) {
819     if (IS_MAIN_THREAD)
820 	return (&xmlDefaultSAXHandler);
821     else
822 	return (&xmlGetGlobalState()->xmlDefaultSAXHandler);
823 }
824 #endif /* LIBXML_SAX1_ENABLED */
825 
826 #undef	xmlDefaultSAXLocator
827 xmlSAXLocator *
__xmlDefaultSAXLocator(void)828 __xmlDefaultSAXLocator(void) {
829     if (IS_MAIN_THREAD)
830 	return (&xmlDefaultSAXLocator);
831     else
832 	return (&xmlGetGlobalState()->xmlDefaultSAXLocator);
833 }
834 
835 #undef	xmlDoValidityCheckingDefaultValue
836 int *
__xmlDoValidityCheckingDefaultValue(void)837 __xmlDoValidityCheckingDefaultValue(void) {
838     if (IS_MAIN_THREAD)
839 	return (&xmlDoValidityCheckingDefaultValue);
840     else
841 	return (&xmlGetGlobalState()->xmlDoValidityCheckingDefaultValue);
842 }
xmlThrDefDoValidityCheckingDefaultValue(int v)843 int xmlThrDefDoValidityCheckingDefaultValue(int v) {
844     int ret;
845     xmlMutexLock(xmlThrDefMutex);
846     ret = xmlDoValidityCheckingDefaultValueThrDef;
847     xmlDoValidityCheckingDefaultValueThrDef = v;
848     xmlMutexUnlock(xmlThrDefMutex);
849     return ret;
850 }
851 
852 #undef	xmlGenericError
853 xmlGenericErrorFunc *
__xmlGenericError(void)854 __xmlGenericError(void) {
855     if (IS_MAIN_THREAD)
856 	return (&xmlGenericError);
857     else
858 	return (&xmlGetGlobalState()->xmlGenericError);
859 }
860 
861 #undef	xmlStructuredError
862 xmlStructuredErrorFunc *
__xmlStructuredError(void)863 __xmlStructuredError(void) {
864     if (IS_MAIN_THREAD)
865 	return (&xmlStructuredError);
866     else
867 	return (&xmlGetGlobalState()->xmlStructuredError);
868 }
869 
870 #undef	xmlGenericErrorContext
871 void * *
__xmlGenericErrorContext(void)872 __xmlGenericErrorContext(void) {
873     if (IS_MAIN_THREAD)
874 	return (&xmlGenericErrorContext);
875     else
876 	return (&xmlGetGlobalState()->xmlGenericErrorContext);
877 }
878 
879 #undef	xmlGetWarningsDefaultValue
880 int *
__xmlGetWarningsDefaultValue(void)881 __xmlGetWarningsDefaultValue(void) {
882     if (IS_MAIN_THREAD)
883 	return (&xmlGetWarningsDefaultValue);
884     else
885 	return (&xmlGetGlobalState()->xmlGetWarningsDefaultValue);
886 }
xmlThrDefGetWarningsDefaultValue(int v)887 int xmlThrDefGetWarningsDefaultValue(int v) {
888     int ret;
889     xmlMutexLock(xmlThrDefMutex);
890     ret = xmlGetWarningsDefaultValueThrDef;
891     xmlGetWarningsDefaultValueThrDef = v;
892     xmlMutexUnlock(xmlThrDefMutex);
893     return ret;
894 }
895 
896 #undef	xmlIndentTreeOutput
897 int *
__xmlIndentTreeOutput(void)898 __xmlIndentTreeOutput(void) {
899     if (IS_MAIN_THREAD)
900 	return (&xmlIndentTreeOutput);
901     else
902 	return (&xmlGetGlobalState()->xmlIndentTreeOutput);
903 }
xmlThrDefIndentTreeOutput(int v)904 int xmlThrDefIndentTreeOutput(int v) {
905     int ret;
906     xmlMutexLock(xmlThrDefMutex);
907     ret = xmlIndentTreeOutputThrDef;
908     xmlIndentTreeOutputThrDef = v;
909     xmlMutexUnlock(xmlThrDefMutex);
910     return ret;
911 }
912 
913 #undef xmlTreeIndentString
914 const char * *
__xmlTreeIndentString(void)915 __xmlTreeIndentString(void) {
916     if (IS_MAIN_THREAD)
917 	return (&xmlTreeIndentString);
918     else
919 	return (&xmlGetGlobalState()->xmlTreeIndentString);
920 }
xmlThrDefTreeIndentString(const char * v)921 const char * xmlThrDefTreeIndentString(const char * v) {
922     const char * ret;
923     xmlMutexLock(xmlThrDefMutex);
924     ret = xmlTreeIndentStringThrDef;
925     xmlTreeIndentStringThrDef = v;
926     xmlMutexUnlock(xmlThrDefMutex);
927     return ret;
928 }
929 
930 #undef	xmlKeepBlanksDefaultValue
931 int *
__xmlKeepBlanksDefaultValue(void)932 __xmlKeepBlanksDefaultValue(void) {
933     if (IS_MAIN_THREAD)
934 	return (&xmlKeepBlanksDefaultValue);
935     else
936 	return (&xmlGetGlobalState()->xmlKeepBlanksDefaultValue);
937 }
xmlThrDefKeepBlanksDefaultValue(int v)938 int xmlThrDefKeepBlanksDefaultValue(int v) {
939     int ret;
940     xmlMutexLock(xmlThrDefMutex);
941     ret = xmlKeepBlanksDefaultValueThrDef;
942     xmlKeepBlanksDefaultValueThrDef = v;
943     xmlMutexUnlock(xmlThrDefMutex);
944     return ret;
945 }
946 
947 #undef	xmlLineNumbersDefaultValue
948 int *
__xmlLineNumbersDefaultValue(void)949 __xmlLineNumbersDefaultValue(void) {
950     if (IS_MAIN_THREAD)
951 	return (&xmlLineNumbersDefaultValue);
952     else
953 	return (&xmlGetGlobalState()->xmlLineNumbersDefaultValue);
954 }
xmlThrDefLineNumbersDefaultValue(int v)955 int xmlThrDefLineNumbersDefaultValue(int v) {
956     int ret;
957     xmlMutexLock(xmlThrDefMutex);
958     ret = xmlLineNumbersDefaultValueThrDef;
959     xmlLineNumbersDefaultValueThrDef = v;
960     xmlMutexUnlock(xmlThrDefMutex);
961     return ret;
962 }
963 
964 #undef	xmlLoadExtDtdDefaultValue
965 int *
__xmlLoadExtDtdDefaultValue(void)966 __xmlLoadExtDtdDefaultValue(void) {
967     if (IS_MAIN_THREAD)
968 	return (&xmlLoadExtDtdDefaultValue);
969     else
970 	return (&xmlGetGlobalState()->xmlLoadExtDtdDefaultValue);
971 }
xmlThrDefLoadExtDtdDefaultValue(int v)972 int xmlThrDefLoadExtDtdDefaultValue(int v) {
973     int ret;
974     xmlMutexLock(xmlThrDefMutex);
975     ret = xmlLoadExtDtdDefaultValueThrDef;
976     xmlLoadExtDtdDefaultValueThrDef = v;
977     xmlMutexUnlock(xmlThrDefMutex);
978     return ret;
979 }
980 
981 #undef	xmlParserDebugEntities
982 int *
__xmlParserDebugEntities(void)983 __xmlParserDebugEntities(void) {
984     if (IS_MAIN_THREAD)
985 	return (&xmlParserDebugEntities);
986     else
987 	return (&xmlGetGlobalState()->xmlParserDebugEntities);
988 }
xmlThrDefParserDebugEntities(int v)989 int xmlThrDefParserDebugEntities(int v) {
990     int ret;
991     xmlMutexLock(xmlThrDefMutex);
992     ret = xmlParserDebugEntitiesThrDef;
993     xmlParserDebugEntitiesThrDef = v;
994     xmlMutexUnlock(xmlThrDefMutex);
995     return ret;
996 }
997 
998 #undef	xmlParserVersion
999 const char * *
__xmlParserVersion(void)1000 __xmlParserVersion(void) {
1001     if (IS_MAIN_THREAD)
1002 	return (&xmlParserVersion);
1003     else
1004 	return (&xmlGetGlobalState()->xmlParserVersion);
1005 }
1006 
1007 #undef	xmlPedanticParserDefaultValue
1008 int *
__xmlPedanticParserDefaultValue(void)1009 __xmlPedanticParserDefaultValue(void) {
1010     if (IS_MAIN_THREAD)
1011 	return (&xmlPedanticParserDefaultValue);
1012     else
1013 	return (&xmlGetGlobalState()->xmlPedanticParserDefaultValue);
1014 }
xmlThrDefPedanticParserDefaultValue(int v)1015 int xmlThrDefPedanticParserDefaultValue(int v) {
1016     int ret;
1017     xmlMutexLock(xmlThrDefMutex);
1018     ret = xmlPedanticParserDefaultValueThrDef;
1019     xmlPedanticParserDefaultValueThrDef = v;
1020     xmlMutexUnlock(xmlThrDefMutex);
1021     return ret;
1022 }
1023 
1024 #undef	xmlSaveNoEmptyTags
1025 int *
__xmlSaveNoEmptyTags(void)1026 __xmlSaveNoEmptyTags(void) {
1027     if (IS_MAIN_THREAD)
1028 	return (&xmlSaveNoEmptyTags);
1029     else
1030 	return (&xmlGetGlobalState()->xmlSaveNoEmptyTags);
1031 }
xmlThrDefSaveNoEmptyTags(int v)1032 int xmlThrDefSaveNoEmptyTags(int v) {
1033     int ret;
1034     xmlMutexLock(xmlThrDefMutex);
1035     ret = xmlSaveNoEmptyTagsThrDef;
1036     xmlSaveNoEmptyTagsThrDef = v;
1037     xmlMutexUnlock(xmlThrDefMutex);
1038     return ret;
1039 }
1040 
1041 #undef	xmlSubstituteEntitiesDefaultValue
1042 int *
__xmlSubstituteEntitiesDefaultValue(void)1043 __xmlSubstituteEntitiesDefaultValue(void) {
1044     if (IS_MAIN_THREAD)
1045 	return (&xmlSubstituteEntitiesDefaultValue);
1046     else
1047 	return (&xmlGetGlobalState()->xmlSubstituteEntitiesDefaultValue);
1048 }
xmlThrDefSubstituteEntitiesDefaultValue(int v)1049 int xmlThrDefSubstituteEntitiesDefaultValue(int v) {
1050     int ret;
1051     xmlMutexLock(xmlThrDefMutex);
1052     ret = xmlSubstituteEntitiesDefaultValueThrDef;
1053     xmlSubstituteEntitiesDefaultValueThrDef = v;
1054     xmlMutexUnlock(xmlThrDefMutex);
1055     return ret;
1056 }
1057 
1058 #undef	xmlRegisterNodeDefaultValue
1059 xmlRegisterNodeFunc *
__xmlRegisterNodeDefaultValue(void)1060 __xmlRegisterNodeDefaultValue(void) {
1061     if (IS_MAIN_THREAD)
1062 	return (&xmlRegisterNodeDefaultValue);
1063     else
1064 	return (&xmlGetGlobalState()->xmlRegisterNodeDefaultValue);
1065 }
1066 
1067 #undef	xmlDeregisterNodeDefaultValue
1068 xmlDeregisterNodeFunc *
__xmlDeregisterNodeDefaultValue(void)1069 __xmlDeregisterNodeDefaultValue(void) {
1070     if (IS_MAIN_THREAD)
1071 	return (&xmlDeregisterNodeDefaultValue);
1072     else
1073 	return (&xmlGetGlobalState()->xmlDeregisterNodeDefaultValue);
1074 }
1075 
1076 #undef	xmlParserInputBufferCreateFilenameValue
1077 xmlParserInputBufferCreateFilenameFunc *
__xmlParserInputBufferCreateFilenameValue(void)1078 __xmlParserInputBufferCreateFilenameValue(void) {
1079     if (IS_MAIN_THREAD)
1080 	return (&xmlParserInputBufferCreateFilenameValue);
1081     else
1082 	return (&xmlGetGlobalState()->xmlParserInputBufferCreateFilenameValue);
1083 }
1084 
1085 #undef	xmlOutputBufferCreateFilenameValue
1086 xmlOutputBufferCreateFilenameFunc *
__xmlOutputBufferCreateFilenameValue(void)1087 __xmlOutputBufferCreateFilenameValue(void) {
1088     if (IS_MAIN_THREAD)
1089 	return (&xmlOutputBufferCreateFilenameValue);
1090     else
1091 	return (&xmlGetGlobalState()->xmlOutputBufferCreateFilenameValue);
1092 }
1093 
1094 #define bottom_globals
1095 #include "elfgcchack.h"
1096