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