xref: /aosp_15_r20/external/libxml2/include/libxml/xmlmemory.h (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Worker /*
2*7c568831SAndroid Build Coastguard Worker  * Summary: interface for the memory allocator
3*7c568831SAndroid Build Coastguard Worker  * Description: provides interfaces for the memory allocator,
4*7c568831SAndroid Build Coastguard Worker  *              including debugging capabilities.
5*7c568831SAndroid Build Coastguard Worker  *
6*7c568831SAndroid Build Coastguard Worker  * Copy: See Copyright for the status of this software.
7*7c568831SAndroid Build Coastguard Worker  *
8*7c568831SAndroid Build Coastguard Worker  * Author: Daniel Veillard
9*7c568831SAndroid Build Coastguard Worker  */
10*7c568831SAndroid Build Coastguard Worker 
11*7c568831SAndroid Build Coastguard Worker 
12*7c568831SAndroid Build Coastguard Worker #ifndef __DEBUG_MEMORY_ALLOC__
13*7c568831SAndroid Build Coastguard Worker #define __DEBUG_MEMORY_ALLOC__
14*7c568831SAndroid Build Coastguard Worker 
15*7c568831SAndroid Build Coastguard Worker #include <stdio.h>
16*7c568831SAndroid Build Coastguard Worker #include <libxml/xmlversion.h>
17*7c568831SAndroid Build Coastguard Worker 
18*7c568831SAndroid Build Coastguard Worker #ifdef __cplusplus
19*7c568831SAndroid Build Coastguard Worker extern "C" {
20*7c568831SAndroid Build Coastguard Worker #endif
21*7c568831SAndroid Build Coastguard Worker 
22*7c568831SAndroid Build Coastguard Worker /*
23*7c568831SAndroid Build Coastguard Worker  * The XML memory wrapper support 4 basic overloadable functions.
24*7c568831SAndroid Build Coastguard Worker  */
25*7c568831SAndroid Build Coastguard Worker /**
26*7c568831SAndroid Build Coastguard Worker  * xmlFreeFunc:
27*7c568831SAndroid Build Coastguard Worker  * @mem: an already allocated block of memory
28*7c568831SAndroid Build Coastguard Worker  *
29*7c568831SAndroid Build Coastguard Worker  * Signature for a free() implementation.
30*7c568831SAndroid Build Coastguard Worker  */
31*7c568831SAndroid Build Coastguard Worker typedef void (*xmlFreeFunc)(void *mem);
32*7c568831SAndroid Build Coastguard Worker /**
33*7c568831SAndroid Build Coastguard Worker  * xmlMallocFunc:
34*7c568831SAndroid Build Coastguard Worker  * @size:  the size requested in bytes
35*7c568831SAndroid Build Coastguard Worker  *
36*7c568831SAndroid Build Coastguard Worker  * Signature for a malloc() implementation.
37*7c568831SAndroid Build Coastguard Worker  *
38*7c568831SAndroid Build Coastguard Worker  * Returns a pointer to the newly allocated block or NULL in case of error.
39*7c568831SAndroid Build Coastguard Worker  */
40*7c568831SAndroid Build Coastguard Worker typedef void *(LIBXML_ATTR_ALLOC_SIZE(1) *xmlMallocFunc)(size_t size);
41*7c568831SAndroid Build Coastguard Worker 
42*7c568831SAndroid Build Coastguard Worker /**
43*7c568831SAndroid Build Coastguard Worker  * xmlReallocFunc:
44*7c568831SAndroid Build Coastguard Worker  * @mem: an already allocated block of memory
45*7c568831SAndroid Build Coastguard Worker  * @size:  the new size requested in bytes
46*7c568831SAndroid Build Coastguard Worker  *
47*7c568831SAndroid Build Coastguard Worker  * Signature for a realloc() implementation.
48*7c568831SAndroid Build Coastguard Worker  *
49*7c568831SAndroid Build Coastguard Worker  * Returns a pointer to the newly reallocated block or NULL in case of error.
50*7c568831SAndroid Build Coastguard Worker  */
51*7c568831SAndroid Build Coastguard Worker typedef void *(*xmlReallocFunc)(void *mem, size_t size);
52*7c568831SAndroid Build Coastguard Worker 
53*7c568831SAndroid Build Coastguard Worker /**
54*7c568831SAndroid Build Coastguard Worker  * xmlStrdupFunc:
55*7c568831SAndroid Build Coastguard Worker  * @str: a zero terminated string
56*7c568831SAndroid Build Coastguard Worker  *
57*7c568831SAndroid Build Coastguard Worker  * Signature for an strdup() implementation.
58*7c568831SAndroid Build Coastguard Worker  *
59*7c568831SAndroid Build Coastguard Worker  * Returns the copy of the string or NULL in case of error.
60*7c568831SAndroid Build Coastguard Worker  */
61*7c568831SAndroid Build Coastguard Worker typedef char *(*xmlStrdupFunc)(const char *str);
62*7c568831SAndroid Build Coastguard Worker 
63*7c568831SAndroid Build Coastguard Worker /*
64*7c568831SAndroid Build Coastguard Worker  * In general the memory allocation entry points are not kept
65*7c568831SAndroid Build Coastguard Worker  * thread specific but this can be overridden by LIBXML_THREAD_ALLOC_ENABLED
66*7c568831SAndroid Build Coastguard Worker  *    - xmlMalloc
67*7c568831SAndroid Build Coastguard Worker  *    - xmlMallocAtomic
68*7c568831SAndroid Build Coastguard Worker  *    - xmlRealloc
69*7c568831SAndroid Build Coastguard Worker  *    - xmlMemStrdup
70*7c568831SAndroid Build Coastguard Worker  *    - xmlFree
71*7c568831SAndroid Build Coastguard Worker  */
72*7c568831SAndroid Build Coastguard Worker /** DOC_DISABLE */
73*7c568831SAndroid Build Coastguard Worker #ifdef LIBXML_THREAD_ALLOC_ENABLED
74*7c568831SAndroid Build Coastguard Worker   #define XML_GLOBALS_ALLOC \
75*7c568831SAndroid Build Coastguard Worker     XML_OP(xmlMalloc, xmlMallocFunc, XML_NO_ATTR) \
76*7c568831SAndroid Build Coastguard Worker     XML_OP(xmlMallocAtomic, xmlMallocFunc, XML_NO_ATTR) \
77*7c568831SAndroid Build Coastguard Worker     XML_OP(xmlRealloc, xmlReallocFunc, XML_NO_ATTR) \
78*7c568831SAndroid Build Coastguard Worker     XML_OP(xmlFree, xmlFreeFunc, XML_NO_ATTR) \
79*7c568831SAndroid Build Coastguard Worker     XML_OP(xmlMemStrdup, xmlStrdupFunc, XML_NO_ATTR)
80*7c568831SAndroid Build Coastguard Worker   #define XML_OP XML_DECLARE_GLOBAL
81*7c568831SAndroid Build Coastguard Worker     XML_GLOBALS_ALLOC
82*7c568831SAndroid Build Coastguard Worker   #undef XML_OP
83*7c568831SAndroid Build Coastguard Worker   #if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION)
84*7c568831SAndroid Build Coastguard Worker     #define xmlMalloc XML_GLOBAL_MACRO(xmlMalloc)
85*7c568831SAndroid Build Coastguard Worker     #define xmlMallocAtomic XML_GLOBAL_MACRO(xmlMallocAtomic)
86*7c568831SAndroid Build Coastguard Worker     #define xmlRealloc XML_GLOBAL_MACRO(xmlRealloc)
87*7c568831SAndroid Build Coastguard Worker     #define xmlFree XML_GLOBAL_MACRO(xmlFree)
88*7c568831SAndroid Build Coastguard Worker     #define xmlMemStrdup XML_GLOBAL_MACRO(xmlMemStrdup)
89*7c568831SAndroid Build Coastguard Worker   #endif
90*7c568831SAndroid Build Coastguard Worker #else
91*7c568831SAndroid Build Coastguard Worker   #define XML_GLOBALS_ALLOC
92*7c568831SAndroid Build Coastguard Worker /** DOC_ENABLE */
93*7c568831SAndroid Build Coastguard Worker   XMLPUBVAR xmlMallocFunc xmlMalloc;
94*7c568831SAndroid Build Coastguard Worker   XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
95*7c568831SAndroid Build Coastguard Worker   XMLPUBVAR xmlReallocFunc xmlRealloc;
96*7c568831SAndroid Build Coastguard Worker   XMLPUBVAR xmlFreeFunc xmlFree;
97*7c568831SAndroid Build Coastguard Worker   XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
98*7c568831SAndroid Build Coastguard Worker #endif
99*7c568831SAndroid Build Coastguard Worker 
100*7c568831SAndroid Build Coastguard Worker /*
101*7c568831SAndroid Build Coastguard Worker  * The way to overload the existing functions.
102*7c568831SAndroid Build Coastguard Worker  * The xmlGc function have an extra entry for atomic block
103*7c568831SAndroid Build Coastguard Worker  * allocations useful for garbage collected memory allocators
104*7c568831SAndroid Build Coastguard Worker  */
105*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int
106*7c568831SAndroid Build Coastguard Worker 	xmlMemSetup	(xmlFreeFunc freeFunc,
107*7c568831SAndroid Build Coastguard Worker 			 xmlMallocFunc mallocFunc,
108*7c568831SAndroid Build Coastguard Worker 			 xmlReallocFunc reallocFunc,
109*7c568831SAndroid Build Coastguard Worker 			 xmlStrdupFunc strdupFunc);
110*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int
111*7c568831SAndroid Build Coastguard Worker 	xmlMemGet	(xmlFreeFunc *freeFunc,
112*7c568831SAndroid Build Coastguard Worker 			 xmlMallocFunc *mallocFunc,
113*7c568831SAndroid Build Coastguard Worker 			 xmlReallocFunc *reallocFunc,
114*7c568831SAndroid Build Coastguard Worker 			 xmlStrdupFunc *strdupFunc);
115*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
116*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int
117*7c568831SAndroid Build Coastguard Worker 	xmlGcMemSetup	(xmlFreeFunc freeFunc,
118*7c568831SAndroid Build Coastguard Worker 			 xmlMallocFunc mallocFunc,
119*7c568831SAndroid Build Coastguard Worker 			 xmlMallocFunc mallocAtomicFunc,
120*7c568831SAndroid Build Coastguard Worker 			 xmlReallocFunc reallocFunc,
121*7c568831SAndroid Build Coastguard Worker 			 xmlStrdupFunc strdupFunc);
122*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
123*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int
124*7c568831SAndroid Build Coastguard Worker 	xmlGcMemGet	(xmlFreeFunc *freeFunc,
125*7c568831SAndroid Build Coastguard Worker 			 xmlMallocFunc *mallocFunc,
126*7c568831SAndroid Build Coastguard Worker 			 xmlMallocFunc *mallocAtomicFunc,
127*7c568831SAndroid Build Coastguard Worker 			 xmlReallocFunc *reallocFunc,
128*7c568831SAndroid Build Coastguard Worker 			 xmlStrdupFunc *strdupFunc);
129*7c568831SAndroid Build Coastguard Worker 
130*7c568831SAndroid Build Coastguard Worker /*
131*7c568831SAndroid Build Coastguard Worker  * Initialization of the memory layer.
132*7c568831SAndroid Build Coastguard Worker  */
133*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
134*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int
135*7c568831SAndroid Build Coastguard Worker 	xmlInitMemory	(void);
136*7c568831SAndroid Build Coastguard Worker 
137*7c568831SAndroid Build Coastguard Worker /*
138*7c568831SAndroid Build Coastguard Worker  * Cleanup of the memory layer.
139*7c568831SAndroid Build Coastguard Worker  */
140*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
141*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void
142*7c568831SAndroid Build Coastguard Worker                 xmlCleanupMemory        (void);
143*7c568831SAndroid Build Coastguard Worker /*
144*7c568831SAndroid Build Coastguard Worker  * These are specific to the XML debug memory wrapper.
145*7c568831SAndroid Build Coastguard Worker  */
146*7c568831SAndroid Build Coastguard Worker XMLPUBFUN size_t
147*7c568831SAndroid Build Coastguard Worker 	xmlMemSize	(void *ptr);
148*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int
149*7c568831SAndroid Build Coastguard Worker 	xmlMemUsed	(void);
150*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int
151*7c568831SAndroid Build Coastguard Worker 	xmlMemBlocks	(void);
152*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
153*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void
154*7c568831SAndroid Build Coastguard Worker 	xmlMemDisplay	(FILE *fp);
155*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
156*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void
157*7c568831SAndroid Build Coastguard Worker 	xmlMemDisplayLast(FILE *fp, long nbBytes);
158*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
159*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void
160*7c568831SAndroid Build Coastguard Worker 	xmlMemShow	(FILE *fp, int nr);
161*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
162*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void
163*7c568831SAndroid Build Coastguard Worker 	xmlMemoryDump	(void);
164*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void *
165*7c568831SAndroid Build Coastguard Worker 	xmlMemMalloc	(size_t size) LIBXML_ATTR_ALLOC_SIZE(1);
166*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void *
167*7c568831SAndroid Build Coastguard Worker 	xmlMemRealloc	(void *ptr,size_t size);
168*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void
169*7c568831SAndroid Build Coastguard Worker 	xmlMemFree	(void *ptr);
170*7c568831SAndroid Build Coastguard Worker XMLPUBFUN char *
171*7c568831SAndroid Build Coastguard Worker 	xmlMemoryStrdup	(const char *str);
172*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
173*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void *
174*7c568831SAndroid Build Coastguard Worker 	xmlMallocLoc	(size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
175*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
176*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void *
177*7c568831SAndroid Build Coastguard Worker 	xmlReallocLoc	(void *ptr, size_t size, const char *file, int line);
178*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
179*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void *
180*7c568831SAndroid Build Coastguard Worker 	xmlMallocAtomicLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
181*7c568831SAndroid Build Coastguard Worker XML_DEPRECATED
182*7c568831SAndroid Build Coastguard Worker XMLPUBFUN char *
183*7c568831SAndroid Build Coastguard Worker 	xmlMemStrdupLoc	(const char *str, const char *file, int line);
184*7c568831SAndroid Build Coastguard Worker 
185*7c568831SAndroid Build Coastguard Worker #ifdef __cplusplus
186*7c568831SAndroid Build Coastguard Worker }
187*7c568831SAndroid Build Coastguard Worker #endif /* __cplusplus */
188*7c568831SAndroid Build Coastguard Worker 
189*7c568831SAndroid Build Coastguard Worker #endif  /* __DEBUG_MEMORY_ALLOC__ */
190*7c568831SAndroid Build Coastguard Worker 
191