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