2 * Summary: interface for the memory allocator
3 * Description: provides interfaces for the memory allocator,
4 * including debugging capabilities.
6 * Copy: See Copyright for the status of this software.
8 * Author: Daniel Veillard
12 #ifndef __DEBUG_MEMORY_ALLOC__
13 #define __DEBUG_MEMORY_ALLOC__
16 #include <libxml/xmlversion.h>
21 * DEBUG_MEMORY replaces the allocator with a collect and debug
22 * shell to the libc allocator.
23 * DEBUG_MEMORY should only be activated when debugging
24 * libxml i.e. if libxml has been configured with --with-debug-mem too.
26 /* #define DEBUG_MEMORY_FREED */
27 /* #define DEBUG_MEMORY_LOCATION */
36 * DEBUG_MEMORY_LOCATION:
38 * DEBUG_MEMORY_LOCATION should be activated only when debugging
39 * libxml i.e. if libxml has been configured with --with-debug-mem too.
41 #ifdef DEBUG_MEMORY_LOCATION
49 * The XML memory wrapper support 4 basic overloadable functions.
53 * @mem: an already allocated block of memory
55 * Signature for a free() implementation.
57 typedef void (XMLCALL *xmlFreeFunc)(void *mem);
60 * @size: the size requested in bytes
62 * Signature for a malloc() implementation.
64 * Returns a pointer to the newly allocated block or NULL in case of error.
66 typedef void *(LIBXML_ATTR_ALLOC_SIZE(1) XMLCALL *xmlMallocFunc)(size_t size);
70 * @mem: an already allocated block of memory
71 * @size: the new size requested in bytes
73 * Signature for a realloc() implementation.
75 * Returns a pointer to the newly reallocated block or NULL in case of error.
77 typedef void *(XMLCALL *xmlReallocFunc)(void *mem, size_t size);
81 * @str: a zero terminated string
83 * Signature for an strdup() implementation.
85 * Returns the copy of the string or NULL in case of error.
87 typedef char *(XMLCALL *xmlStrdupFunc)(const char *str);
90 * The 4 interfaces used for all memory handling within libxml.
91 LIBXML_DLL_IMPORT xmlFreeFunc xmlFree;
92 LIBXML_DLL_IMPORT xmlMallocFunc xmlMalloc;
93 LIBXML_DLL_IMPORT xmlMallocFunc xmlMallocAtomic;
94 LIBXML_DLL_IMPORT xmlReallocFunc xmlRealloc;
95 LIBXML_DLL_IMPORT xmlStrdupFunc xmlMemStrdup;
99 * The way to overload the existing functions.
100 * The xmlGc function have an extra entry for atomic block
101 * allocations useful for garbage collected memory allocators
103 XMLPUBFUN int XMLCALL
104 xmlMemSetup (xmlFreeFunc freeFunc,
105 xmlMallocFunc mallocFunc,
106 xmlReallocFunc reallocFunc,
107 xmlStrdupFunc strdupFunc);
108 XMLPUBFUN int XMLCALL
109 xmlMemGet (xmlFreeFunc *freeFunc,
110 xmlMallocFunc *mallocFunc,
111 xmlReallocFunc *reallocFunc,
112 xmlStrdupFunc *strdupFunc);
113 XMLPUBFUN int XMLCALL
114 xmlGcMemSetup (xmlFreeFunc freeFunc,
115 xmlMallocFunc mallocFunc,
116 xmlMallocFunc mallocAtomicFunc,
117 xmlReallocFunc reallocFunc,
118 xmlStrdupFunc strdupFunc);
119 XMLPUBFUN int XMLCALL
120 xmlGcMemGet (xmlFreeFunc *freeFunc,
121 xmlMallocFunc *mallocFunc,
122 xmlMallocFunc *mallocAtomicFunc,
123 xmlReallocFunc *reallocFunc,
124 xmlStrdupFunc *strdupFunc);
127 * Initialization of the memory layer.
129 XMLPUBFUN int XMLCALL
130 xmlInitMemory (void);
133 * Cleanup of the memory layer.
135 XMLPUBFUN void XMLCALL
136 xmlCleanupMemory (void);
138 * These are specific to the XML debug memory wrapper.
140 XMLPUBFUN int XMLCALL
142 XMLPUBFUN int XMLCALL
144 XMLPUBFUN void XMLCALL
145 xmlMemDisplay (FILE *fp);
146 XMLPUBFUN void XMLCALL
147 xmlMemDisplayLast(FILE *fp, long nbBytes);
148 XMLPUBFUN void XMLCALL
149 xmlMemShow (FILE *fp, int nr);
150 XMLPUBFUN void XMLCALL
151 xmlMemoryDump (void);
152 XMLPUBFUN void * XMLCALL
153 xmlMemMalloc (size_t size) LIBXML_ATTR_ALLOC_SIZE(1);
154 XMLPUBFUN void * XMLCALL
155 xmlMemRealloc (void *ptr,size_t size);
156 XMLPUBFUN void XMLCALL
157 xmlMemFree (void *ptr);
158 XMLPUBFUN char * XMLCALL
159 xmlMemoryStrdup (const char *str);
160 XMLPUBFUN void * XMLCALL
161 xmlMallocLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
162 XMLPUBFUN void * XMLCALL
163 xmlReallocLoc (void *ptr, size_t size, const char *file, int line);
164 XMLPUBFUN void * XMLCALL
165 xmlMallocAtomicLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
166 XMLPUBFUN char * XMLCALL
167 xmlMemStrdupLoc (const char *str, const char *file, int line);
170 #ifdef DEBUG_MEMORY_LOCATION
173 * @size: number of bytes to allocate
175 * Wrapper for the malloc() function used in the XML library.
177 * Returns the pointer to the allocated area or NULL in case of error.
179 #define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
182 * @size: number of bytes to allocate
184 * Wrapper for the malloc() function used in the XML library for allocation
185 * of block not containing pointers to other areas.
187 * Returns the pointer to the allocated area or NULL in case of error.
189 #define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
192 * @ptr: pointer to the existing allocated area
193 * @size: number of bytes to allocate
195 * Wrapper for the realloc() function used in the XML library.
197 * Returns the pointer to the allocated area or NULL in case of error.
199 #define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
202 * @str: pointer to the existing string
204 * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
206 * Returns the pointer to the allocated area or NULL in case of error.
208 #define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
210 #endif /* DEBUG_MEMORY_LOCATION */
214 #endif /* __cplusplus */
216 #ifndef __XML_GLOBALS_H
217 #ifndef __XML_THREADS_H__
218 #include <libxml/threads.h>
219 #include <libxml/globals.h>
223 #endif /* __DEBUG_MEMORY_ALLOC__ */