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