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
 */
47
void xmlInitGlobals(void)
48
{
49
    xmlThrDefMutex = xmlNewMutex();
50
}
51
52
/**
53
 * xmlCleanupGlobals:
54
 *
55
 * Additional cleanup for multi-threading
56
 */
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
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
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
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
590
xmlRegisterNodeDefault(xmlRegisterNodeFunc func)
591
{
592
    xmlRegisterNodeFunc old = xmlRegisterNodeDefaultValue;
593
    
594
    __xmlRegisterCallbacks = 1;
595
    xmlRegisterNodeDefaultValue = func;
596
    return(old);
597
}
598
599
xmlRegisterNodeFunc
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
623
xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func)
624
{
625
    xmlDeregisterNodeFunc old = xmlDeregisterNodeDefaultValue;
626
    
627
    __xmlRegisterCallbacks = 1;
628
    xmlDeregisterNodeDefaultValue = func;
629
    return(old);
630
}
631
632
xmlDeregisterNodeFunc
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
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
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 *
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 *
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 *
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 *
721
__xmlMalloc(void){
722
    if (IS_MAIN_THREAD)
723
        return (&xmlMalloc);
724
    else
725
    	return (&xmlGetGlobalState()->xmlMalloc);
726
}
727
728
#undef xmlMallocAtomic
729
xmlMallocFunc *
730
__xmlMallocAtomic(void){
731
    if (IS_MAIN_THREAD)
732
        return (&xmlMallocAtomic);
733
    else
734
        return (&xmlGetGlobalState()->xmlMallocAtomic);
735
}
736
737
#undef xmlRealloc
738
xmlReallocFunc *
739
__xmlRealloc(void){
740
    if (IS_MAIN_THREAD)
741
        return (&xmlRealloc);
742
    else
743
        return (&xmlGetGlobalState()->xmlRealloc);
744
}
745
746
#undef xmlFree
747
xmlFreeFunc *
748
__xmlFree(void){
749
    if (IS_MAIN_THREAD)
750
        return (&xmlFree);
751
    else
752
        return (&xmlGetGlobalState()->xmlFree);
753
}
754
755
xmlStrdupFunc *
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 *
774
__oldXMLWDcompatibility(void) {
775
    if (IS_MAIN_THREAD)
776
	return (&oldXMLWDcompatibility);
777
    else
778
	return (&xmlGetGlobalState()->oldXMLWDcompatibility);
779
}
780
781
#undef	xmlBufferAllocScheme
782
xmlBufferAllocationScheme *
783
__xmlBufferAllocScheme(void) {
784
    if (IS_MAIN_THREAD)
785
	return (&xmlBufferAllocScheme);
786
    else
787
	return (&xmlGetGlobalState()->xmlBufferAllocScheme);
788
}
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 *
800
__xmlDefaultBufferSize(void) {
801
    if (IS_MAIN_THREAD)
802
	return (&xmlDefaultBufferSize);
803
    else
804
	return (&xmlGetGlobalState()->xmlDefaultBufferSize);
805
}
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 *
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 *
828
__xmlDefaultSAXLocator(void) {
829
    if (IS_MAIN_THREAD)
830
	return (&xmlDefaultSAXLocator);
831
    else
832
	return (&xmlGetGlobalState()->xmlDefaultSAXLocator);
833
}
834
835
#undef	xmlDoValidityCheckingDefaultValue
836
int *
837
__xmlDoValidityCheckingDefaultValue(void) {
838
    if (IS_MAIN_THREAD)
839
	return (&xmlDoValidityCheckingDefaultValue);
840
    else
841
	return (&xmlGetGlobalState()->xmlDoValidityCheckingDefaultValue);
842
}
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 *
854
__xmlGenericError(void) {
855
    if (IS_MAIN_THREAD)
856
	return (&xmlGenericError);
857
    else
858
	return (&xmlGetGlobalState()->xmlGenericError);
859
}
860
861
#undef	xmlStructuredError
862
xmlStructuredErrorFunc *
863
__xmlStructuredError(void) {
864
    if (IS_MAIN_THREAD)
865
	return (&xmlStructuredError);
866
    else
867
	return (&xmlGetGlobalState()->xmlStructuredError);
868
}
869
870
#undef	xmlGenericErrorContext
871
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 *
881
__xmlGetWarningsDefaultValue(void) {
882
    if (IS_MAIN_THREAD)
883
	return (&xmlGetWarningsDefaultValue);
884
    else
885
	return (&xmlGetGlobalState()->xmlGetWarningsDefaultValue);
886
}
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 *
898
__xmlIndentTreeOutput(void) {
899
    if (IS_MAIN_THREAD)
900
	return (&xmlIndentTreeOutput);
901
    else
902
	return (&xmlGetGlobalState()->xmlIndentTreeOutput);
903
}
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 * *
915
__xmlTreeIndentString(void) {
916
    if (IS_MAIN_THREAD)
917
	return (&xmlTreeIndentString);
918
    else
919
	return (&xmlGetGlobalState()->xmlTreeIndentString);
920
}
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 *
932
__xmlKeepBlanksDefaultValue(void) {
933
    if (IS_MAIN_THREAD)
934
	return (&xmlKeepBlanksDefaultValue);
935
    else
936
	return (&xmlGetGlobalState()->xmlKeepBlanksDefaultValue);
937
}
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 *
949
__xmlLineNumbersDefaultValue(void) {
950
    if (IS_MAIN_THREAD)
951
	return (&xmlLineNumbersDefaultValue);
952
    else
953
	return (&xmlGetGlobalState()->xmlLineNumbersDefaultValue);
954
}
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 *
966
__xmlLoadExtDtdDefaultValue(void) {
967
    if (IS_MAIN_THREAD)
968
	return (&xmlLoadExtDtdDefaultValue);
969
    else
970
	return (&xmlGetGlobalState()->xmlLoadExtDtdDefaultValue);
971
}
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 *
983
__xmlParserDebugEntities(void) {
984
    if (IS_MAIN_THREAD)
985
	return (&xmlParserDebugEntities);
986
    else
987
	return (&xmlGetGlobalState()->xmlParserDebugEntities);
988
}
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 * *
1000
__xmlParserVersion(void) {
1001
    if (IS_MAIN_THREAD)
1002
	return (&xmlParserVersion);
1003
    else
1004
	return (&xmlGetGlobalState()->xmlParserVersion);
1005
}
1006
1007
#undef	xmlPedanticParserDefaultValue
1008
int *
1009
__xmlPedanticParserDefaultValue(void) {
1010
    if (IS_MAIN_THREAD)
1011
	return (&xmlPedanticParserDefaultValue);
1012
    else
1013
	return (&xmlGetGlobalState()->xmlPedanticParserDefaultValue);
1014
}
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 *
1026
__xmlSaveNoEmptyTags(void) {
1027
    if (IS_MAIN_THREAD)
1028
	return (&xmlSaveNoEmptyTags);
1029
    else
1030
	return (&xmlGetGlobalState()->xmlSaveNoEmptyTags);
1031
}
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 *
1043
__xmlSubstituteEntitiesDefaultValue(void) {
1044
    if (IS_MAIN_THREAD)
1045
	return (&xmlSubstituteEntitiesDefaultValue);
1046
    else
1047
	return (&xmlGetGlobalState()->xmlSubstituteEntitiesDefaultValue);
1048
}
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 *
1060
__xmlRegisterNodeDefaultValue(void) {
1061
    if (IS_MAIN_THREAD)
1062
	return (&xmlRegisterNodeDefaultValue);
1063
    else
1064
	return (&xmlGetGlobalState()->xmlRegisterNodeDefaultValue);
1065
}
1066
1067
#undef	xmlDeregisterNodeDefaultValue
1068
xmlDeregisterNodeFunc *
1069
__xmlDeregisterNodeDefaultValue(void) {
1070
    if (IS_MAIN_THREAD)
1071
	return (&xmlDeregisterNodeDefaultValue);
1072
    else
1073
	return (&xmlGetGlobalState()->xmlDeregisterNodeDefaultValue);
1074
}
1075
1076
#undef	xmlParserInputBufferCreateFilenameValue
1077
xmlParserInputBufferCreateFilenameFunc *
1078
__xmlParserInputBufferCreateFilenameValue(void) {
1079
    if (IS_MAIN_THREAD)
1080
	return (&xmlParserInputBufferCreateFilenameValue);
1081
    else
1082
	return (&xmlGetGlobalState()->xmlParserInputBufferCreateFilenameValue);
1083
}
1084
1085
#undef	xmlOutputBufferCreateFilenameValue
1086
xmlOutputBufferCreateFilenameFunc *
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"