1*7c568831SAndroid Build Coastguard Worker * Summary: interface for the memory allocator 2*7c568831SAndroid Build Coastguard Worker * Description: provides interfaces for the memory allocator, 3*7c568831SAndroid Build Coastguard Worker * including debugging capabilities. 4*7c568831SAndroid Build Coastguard Worker * 5*7c568831SAndroid Build Coastguard Worker * Copy: See Copyright for the status of this software. 6*7c568831SAndroid Build Coastguard Worker * 7*7c568831SAndroid Build Coastguard Worker * Author: Patrick Monnerat <[email protected]>, DATASPHERE S.A. 8*7c568831SAndroid Build Coastguard Worker 9*7c568831SAndroid Build Coastguard Worker /if not defined(DEBUG_MEMORY_ALLOC__) 10*7c568831SAndroid Build Coastguard Worker /define DEBUG_MEMORY_ALLOC__ 11*7c568831SAndroid Build Coastguard Worker 12*7c568831SAndroid Build Coastguard Worker /include "libxmlrpg/xmlversion" 13*7c568831SAndroid Build Coastguard Worker /include "libxmlrpg/xmlTypesC" 14*7c568831SAndroid Build Coastguard Worker 15*7c568831SAndroid Build Coastguard Worker * DEBUG_MEMORY: 16*7c568831SAndroid Build Coastguard Worker * 17*7c568831SAndroid Build Coastguard Worker * DEBUG_MEMORY replaces the allocator with a collect and debug 18*7c568831SAndroid Build Coastguard Worker * shell to the libc allocator. 19*7c568831SAndroid Build Coastguard Worker * DEBUG_MEMORY should only be activated when debugging 20*7c568831SAndroid Build Coastguard Worker * libxml i.e. if libxml has been configured with --with-debug-mem too. 21*7c568831SAndroid Build Coastguard Worker 22*7c568831SAndroid Build Coastguard Worker * /define DEBUG_MEMORY_FREED 23*7c568831SAndroid Build Coastguard Worker * /define DEBUG_MEMORY_LOCATION 24*7c568831SAndroid Build Coastguard Worker 25*7c568831SAndroid Build Coastguard Worker /if defined(DEBUG) 26*7c568831SAndroid Build Coastguard Worker /if not defined(DEBUG_MEMORY) 27*7c568831SAndroid Build Coastguard Worker /define DEBUG_MEMORY 28*7c568831SAndroid Build Coastguard Worker /endif 29*7c568831SAndroid Build Coastguard Worker /endif 30*7c568831SAndroid Build Coastguard Worker 31*7c568831SAndroid Build Coastguard Worker * DEBUG_MEMORY_LOCATION: 32*7c568831SAndroid Build Coastguard Worker * 33*7c568831SAndroid Build Coastguard Worker * DEBUG_MEMORY_LOCATION should be activated only when debugging 34*7c568831SAndroid Build Coastguard Worker * libxml i.e. if libxml has been configured with --with-debug-mem too. 35*7c568831SAndroid Build Coastguard Worker 36*7c568831SAndroid Build Coastguard Worker /if defined(DEBUG_MEMORY_LOCATION) 37*7c568831SAndroid Build Coastguard Worker /endif 38*7c568831SAndroid Build Coastguard Worker 39*7c568831SAndroid Build Coastguard Worker * The XML memory wrapper support 4 basic overloadable functions. 40*7c568831SAndroid Build Coastguard Worker 41*7c568831SAndroid Build Coastguard Worker * xmlFreeFunc: 42*7c568831SAndroid Build Coastguard Worker * @mem: an already allocated block of memory 43*7c568831SAndroid Build Coastguard Worker * 44*7c568831SAndroid Build Coastguard Worker * Signature for a free() implementation. 45*7c568831SAndroid Build Coastguard Worker 46*7c568831SAndroid Build Coastguard Worker d xmlFreeFunc s * based(######typedef######) 47*7c568831SAndroid Build Coastguard Worker d procptr 48*7c568831SAndroid Build Coastguard Worker 49*7c568831SAndroid Build Coastguard Worker * xmlMallocFunc: 50*7c568831SAndroid Build Coastguard Worker * @size: the size requested in bytes 51*7c568831SAndroid Build Coastguard Worker * 52*7c568831SAndroid Build Coastguard Worker * Signature for a malloc() implementation. 53*7c568831SAndroid Build Coastguard Worker * 54*7c568831SAndroid Build Coastguard Worker * Returns a pointer to the newly allocated block or NULL in case of error. 55*7c568831SAndroid Build Coastguard Worker 56*7c568831SAndroid Build Coastguard Worker d xmlMallocFunc s * based(######typedef######) 57*7c568831SAndroid Build Coastguard Worker d procptr 58*7c568831SAndroid Build Coastguard Worker 59*7c568831SAndroid Build Coastguard Worker * xmlReallocFunc: 60*7c568831SAndroid Build Coastguard Worker * @mem: an already allocated block of memory 61*7c568831SAndroid Build Coastguard Worker * @size: the new size requested in bytes 62*7c568831SAndroid Build Coastguard Worker * 63*7c568831SAndroid Build Coastguard Worker * Signature for a realloc() implementation. 64*7c568831SAndroid Build Coastguard Worker * 65*7c568831SAndroid Build Coastguard Worker * Returns a pointer to the newly reallocated block or NULL in case of error. 66*7c568831SAndroid Build Coastguard Worker 67*7c568831SAndroid Build Coastguard Worker d xmlReallocFunc s * based(######typedef######) 68*7c568831SAndroid Build Coastguard Worker d procptr 69*7c568831SAndroid Build Coastguard Worker 70*7c568831SAndroid Build Coastguard Worker * xmlStrdupFunc: 71*7c568831SAndroid Build Coastguard Worker * @str: a zero terminated string 72*7c568831SAndroid Build Coastguard Worker * 73*7c568831SAndroid Build Coastguard Worker * Signature for an strdup() implementation. 74*7c568831SAndroid Build Coastguard Worker * 75*7c568831SAndroid Build Coastguard Worker * Returns the copy of the string or NULL in case of error. 76*7c568831SAndroid Build Coastguard Worker 77*7c568831SAndroid Build Coastguard Worker d xmlStrdupFunc s * based(######typedef######) 78*7c568831SAndroid Build Coastguard Worker d procptr 79*7c568831SAndroid Build Coastguard Worker 80*7c568831SAndroid Build Coastguard Worker * The 5 interfaces used for all memory handling within libxml. 81*7c568831SAndroid Build Coastguard Worker * Since indirect calls are only supported via a based prototype, 82*7c568831SAndroid Build Coastguard Worker * storage is accessed via functions. 83*7c568831SAndroid Build Coastguard Worker 84*7c568831SAndroid Build Coastguard Worker d get_xmlFree pr extproc('__get_xmlFree') 85*7c568831SAndroid Build Coastguard Worker d like(xmlFreeFunc) 86*7c568831SAndroid Build Coastguard Worker 87*7c568831SAndroid Build Coastguard Worker d set_xmlFree pr extproc('__set_xmlFree') 88*7c568831SAndroid Build Coastguard Worker d func value like(xmlFreeFunc) 89*7c568831SAndroid Build Coastguard Worker 90*7c568831SAndroid Build Coastguard Worker d xmlFree pr extproc('__call_xmlFree') 91*7c568831SAndroid Build Coastguard Worker d mem * value void * 92*7c568831SAndroid Build Coastguard Worker 93*7c568831SAndroid Build Coastguard Worker d get_xmlMalloc pr extproc('__get_xmlMalloc') 94*7c568831SAndroid Build Coastguard Worker d like(xmlMallocFunc) 95*7c568831SAndroid Build Coastguard Worker 96*7c568831SAndroid Build Coastguard Worker d set_xmlMalloc pr extproc('__set_xmlMalloc') 97*7c568831SAndroid Build Coastguard Worker d func value like(xmlMallocFunc) 98*7c568831SAndroid Build Coastguard Worker 99*7c568831SAndroid Build Coastguard Worker d xmlMalloc pr * extproc('__call_xmlMalloc') void * 100*7c568831SAndroid Build Coastguard Worker d size value like(xmlCsize_t) 101*7c568831SAndroid Build Coastguard Worker 102*7c568831SAndroid Build Coastguard Worker d get_xmlMallocAtomic... 103*7c568831SAndroid Build Coastguard Worker d pr extproc('__get_xmlMallocAtomic') 104*7c568831SAndroid Build Coastguard Worker d like(xmlMallocFunc) 105*7c568831SAndroid Build Coastguard Worker 106*7c568831SAndroid Build Coastguard Worker d set_xmlMallocAtomic... 107*7c568831SAndroid Build Coastguard Worker d pr extproc('__set_xmlMallocAtomic') 108*7c568831SAndroid Build Coastguard Worker d func value like(xmlMallocFunc) 109*7c568831SAndroid Build Coastguard Worker 110*7c568831SAndroid Build Coastguard Worker d xmlMallocAtomic... 111*7c568831SAndroid Build Coastguard Worker d pr * extproc('__call_xmlMallocAtomic') void * 112*7c568831SAndroid Build Coastguard Worker d size value like(xmlCsize_t) 113*7c568831SAndroid Build Coastguard Worker 114*7c568831SAndroid Build Coastguard Worker d get_xmlRealloc pr extproc('__get_xmlRealloc') 115*7c568831SAndroid Build Coastguard Worker d like(xmlReallocFunc) 116*7c568831SAndroid Build Coastguard Worker 117*7c568831SAndroid Build Coastguard Worker d set_xmlRealloc pr extproc('__set_xmlRealloc') 118*7c568831SAndroid Build Coastguard Worker d func value like(xmlReallocFunc) 119*7c568831SAndroid Build Coastguard Worker 120*7c568831SAndroid Build Coastguard Worker d xmlRealloc pr * extproc('__call_xmlRealloc') void * 121*7c568831SAndroid Build Coastguard Worker d mem * value void * 122*7c568831SAndroid Build Coastguard Worker d size value like(xmlCsize_t) 123*7c568831SAndroid Build Coastguard Worker 124*7c568831SAndroid Build Coastguard Worker d get_xmlMemStrdup... 125*7c568831SAndroid Build Coastguard Worker d pr extproc('__get_xmlMemStrdup') 126*7c568831SAndroid Build Coastguard Worker d like(xmlStrdupFunc) 127*7c568831SAndroid Build Coastguard Worker 128*7c568831SAndroid Build Coastguard Worker d set_xmlMemStrdup... 129*7c568831SAndroid Build Coastguard Worker d pr extproc('__set_xmlMemstrdup') 130*7c568831SAndroid Build Coastguard Worker d func value like(xmlStrdupFunc) 131*7c568831SAndroid Build Coastguard Worker 132*7c568831SAndroid Build Coastguard Worker d xmlMemStrdup pr * extproc('__call_xmlMemStrdup') void * 133*7c568831SAndroid Build Coastguard Worker d str * value options(*string) const char * 134*7c568831SAndroid Build Coastguard Worker 135*7c568831SAndroid Build Coastguard Worker * The way to overload the existing functions. 136*7c568831SAndroid Build Coastguard Worker * The xmlGc function have an extra entry for atomic block 137*7c568831SAndroid Build Coastguard Worker * allocations useful for garbage collected memory allocators 138*7c568831SAndroid Build Coastguard Worker 139*7c568831SAndroid Build Coastguard Worker d xmlMemSetup pr extproc('xmlMemSetup') 140*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 141*7c568831SAndroid Build Coastguard Worker d freeFunc value like(xmlFreeFunc) 142*7c568831SAndroid Build Coastguard Worker d mallocFunc value like(xmlMallocFunc) 143*7c568831SAndroid Build Coastguard Worker d reallocFunc value like(xmlReallocFunc) 144*7c568831SAndroid Build Coastguard Worker d strdupFunc value like(xmlStrdupFunc) 145*7c568831SAndroid Build Coastguard Worker 146*7c568831SAndroid Build Coastguard Worker d xmlMemGet pr extproc('xmlMemGet') 147*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 148*7c568831SAndroid Build Coastguard Worker d freeFunc like(xmlFreeFunc) 149*7c568831SAndroid Build Coastguard Worker d mallocFunc like(xmlMallocFunc) 150*7c568831SAndroid Build Coastguard Worker d reallocFunc like(xmlReallocFunc) 151*7c568831SAndroid Build Coastguard Worker d strdupFunc like(xmlStrdupFunc) 152*7c568831SAndroid Build Coastguard Worker 153*7c568831SAndroid Build Coastguard Worker d xmlGcMemSetup pr extproc('xmlGcMemSetup') 154*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 155*7c568831SAndroid Build Coastguard Worker d freeFunc value like(xmlFreeFunc) 156*7c568831SAndroid Build Coastguard Worker d mallocFunc value like(xmlMallocFunc) 157*7c568831SAndroid Build Coastguard Worker d mallocAtomicFunc... 158*7c568831SAndroid Build Coastguard Worker d value like(xmlMallocFunc) 159*7c568831SAndroid Build Coastguard Worker d reallocFunc value like(xmlReallocFunc) 160*7c568831SAndroid Build Coastguard Worker d strdupFunc value like(xmlStrdupFunc) 161*7c568831SAndroid Build Coastguard Worker 162*7c568831SAndroid Build Coastguard Worker d xmlGcMemGet pr extproc('xmlGcMemGet') 163*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 164*7c568831SAndroid Build Coastguard Worker d freeFunc like(xmlFreeFunc) 165*7c568831SAndroid Build Coastguard Worker d mallocFunc like(xmlMallocFunc) 166*7c568831SAndroid Build Coastguard Worker d mallocAtomicFunc... 167*7c568831SAndroid Build Coastguard Worker d like(xmlMallocFunc) 168*7c568831SAndroid Build Coastguard Worker d reallocFunc like(xmlReallocFunc) 169*7c568831SAndroid Build Coastguard Worker d strdupFunc like(xmlStrdupFunc) 170*7c568831SAndroid Build Coastguard Worker 171*7c568831SAndroid Build Coastguard Worker * Initialization of the memory layer. 172*7c568831SAndroid Build Coastguard Worker 173*7c568831SAndroid Build Coastguard Worker d xmlInitMemory pr extproc('xmlInitMemory') 174*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 175*7c568831SAndroid Build Coastguard Worker 176*7c568831SAndroid Build Coastguard Worker * Cleanup of the memory layer. 177*7c568831SAndroid Build Coastguard Worker 178*7c568831SAndroid Build Coastguard Worker d xmlCleanupMemory... 179*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlCleanupMemory') 180*7c568831SAndroid Build Coastguard Worker 181*7c568831SAndroid Build Coastguard Worker * These are specific to the XML debug memory wrapper. 182*7c568831SAndroid Build Coastguard Worker 183*7c568831SAndroid Build Coastguard Worker d xmlMemUsed pr extproc('xmlMemUsed') 184*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 185*7c568831SAndroid Build Coastguard Worker 186*7c568831SAndroid Build Coastguard Worker d xmlMemBlocks pr extproc('xmlMemBlocks') 187*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 188*7c568831SAndroid Build Coastguard Worker 189*7c568831SAndroid Build Coastguard Worker d xmlMemDisplay pr extproc('xmlMemDisplay') 190*7c568831SAndroid Build Coastguard Worker d fp * value FILE * 191*7c568831SAndroid Build Coastguard Worker 192*7c568831SAndroid Build Coastguard Worker d xmlMmDisplayLast... 193*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlMemDisplayLast') 194*7c568831SAndroid Build Coastguard Worker d fp * value FILE * 195*7c568831SAndroid Build Coastguard Worker d nbBytes value like(xmlClong) 196*7c568831SAndroid Build Coastguard Worker 197*7c568831SAndroid Build Coastguard Worker d xmlMemShow pr extproc('xmlMemShow') 198*7c568831SAndroid Build Coastguard Worker d fp * value FILE * 199*7c568831SAndroid Build Coastguard Worker d nr value like(xmlCint) 200*7c568831SAndroid Build Coastguard Worker 201*7c568831SAndroid Build Coastguard Worker d xmlMemoryDump pr extproc('xmlMemoryDump') 202*7c568831SAndroid Build Coastguard Worker 203*7c568831SAndroid Build Coastguard Worker d xmlMemMalloc pr * extproc('xmlMemMalloc') void * 204*7c568831SAndroid Build Coastguard Worker d size value like(xmlCsize_t) 205*7c568831SAndroid Build Coastguard Worker 206*7c568831SAndroid Build Coastguard Worker d xmlMemRealloc pr * extproc('xmlMemRealloc') void * 207*7c568831SAndroid Build Coastguard Worker d ptr * value void * 208*7c568831SAndroid Build Coastguard Worker d size value like(xmlCsize_t) 209*7c568831SAndroid Build Coastguard Worker 210*7c568831SAndroid Build Coastguard Worker d xmlMemFree pr extproc('xmlMemFree') 211*7c568831SAndroid Build Coastguard Worker d ptr * value void * 212*7c568831SAndroid Build Coastguard Worker 213*7c568831SAndroid Build Coastguard Worker d xmlMemoryStrdup... 214*7c568831SAndroid Build Coastguard Worker d pr * extproc('xmlMemoryStrdup') char * 215*7c568831SAndroid Build Coastguard Worker d str * value options(*string) const char * 216*7c568831SAndroid Build Coastguard Worker 217*7c568831SAndroid Build Coastguard Worker d xmlMallocLoc pr * extproc('xmlMallocLoc') void * 218*7c568831SAndroid Build Coastguard Worker d size value like(xmlCsize_t) 219*7c568831SAndroid Build Coastguard Worker d file * value options(*string) const char * 220*7c568831SAndroid Build Coastguard Worker d line value like(xmlCint) 221*7c568831SAndroid Build Coastguard Worker 222*7c568831SAndroid Build Coastguard Worker d xmlReallocLoc pr * extproc('xmlReallocLoc') void * 223*7c568831SAndroid Build Coastguard Worker d ptr * value void * 224*7c568831SAndroid Build Coastguard Worker d size value like(xmlCsize_t) 225*7c568831SAndroid Build Coastguard Worker d file * value options(*string) const char * 226*7c568831SAndroid Build Coastguard Worker d line value like(xmlCint) 227*7c568831SAndroid Build Coastguard Worker 228*7c568831SAndroid Build Coastguard Worker d xmlMallocAtomicLoc... 229*7c568831SAndroid Build Coastguard Worker d pr * extproc('xmlMallocAtomicLoc') void * 230*7c568831SAndroid Build Coastguard Worker d size value like(xmlCsize_t) 231*7c568831SAndroid Build Coastguard Worker d file * value options(*string) const char * 232*7c568831SAndroid Build Coastguard Worker d line value like(xmlCint) 233*7c568831SAndroid Build Coastguard Worker 234*7c568831SAndroid Build Coastguard Worker d xmlMemStrdupLoc... 235*7c568831SAndroid Build Coastguard Worker d pr * extproc('xmlMemStrdupLoc') char * 236*7c568831SAndroid Build Coastguard Worker d str * value options(*string) const char * 237*7c568831SAndroid Build Coastguard Worker d file * value options(*string) const char * 238*7c568831SAndroid Build Coastguard Worker d line value like(xmlCint) 239*7c568831SAndroid Build Coastguard Worker 240*7c568831SAndroid Build Coastguard Worker /if not defined(XML_GLOBALS_H) 241*7c568831SAndroid Build Coastguard Worker /if not defined(XML_THREADS_H__) 242*7c568831SAndroid Build Coastguard Worker /include "libxmlrpg/threads" 243*7c568831SAndroid Build Coastguard Worker /include "libxmlrpg/globals" 244*7c568831SAndroid Build Coastguard Worker /endif 245*7c568831SAndroid Build Coastguard Worker /endif 246*7c568831SAndroid Build Coastguard Worker 247*7c568831SAndroid Build Coastguard Worker /endif DEBUG_MEMORY_ALLOC__ 248