* Summary: interface for the memory allocator * Description: provides interfaces for the memory allocator, * including debugging capabilities. * * Copy: See Copyright for the status of this software. * * Author: Patrick Monnerat , DATASPHERE S.A. /if not defined(DEBUG_MEMORY_ALLOC__) /define DEBUG_MEMORY_ALLOC__ /include "libxmlrpg/xmlversion" /include "libxmlrpg/xmlTypesC" * DEBUG_MEMORY: * * DEBUG_MEMORY replaces the allocator with a collect and debug * shell to the libc allocator. * DEBUG_MEMORY should only be activated when debugging * libxml i.e. if libxml has been configured with --with-debug-mem too. * /define DEBUG_MEMORY_FREED * /define DEBUG_MEMORY_LOCATION /if defined(DEBUG) /if not defined(DEBUG_MEMORY) /define DEBUG_MEMORY /endif /endif * DEBUG_MEMORY_LOCATION: * * DEBUG_MEMORY_LOCATION should be activated only when debugging * libxml i.e. if libxml has been configured with --with-debug-mem too. /if defined(DEBUG_MEMORY_LOCATION) /endif * The XML memory wrapper support 4 basic overloadable functions. * xmlFreeFunc: * @mem: an already allocated block of memory * * Signature for a free() implementation. d xmlFreeFunc s * based(######typedef######) d procptr * xmlMallocFunc: * @size: the size requested in bytes * * Signature for a malloc() implementation. * * Returns a pointer to the newly allocated block or NULL in case of error. d xmlMallocFunc s * based(######typedef######) d procptr * xmlReallocFunc: * @mem: an already allocated block of memory * @size: the new size requested in bytes * * Signature for a realloc() implementation. * * Returns a pointer to the newly reallocated block or NULL in case of error. d xmlReallocFunc s * based(######typedef######) d procptr * xmlStrdupFunc: * @str: a zero terminated string * * Signature for an strdup() implementation. * * Returns the copy of the string or NULL in case of error. d xmlStrdupFunc s * based(######typedef######) d procptr * The 5 interfaces used for all memory handling within libxml. * Since indirect calls are only supported via a based prototype, * storage is accessed via functions. d get_xmlFree pr extproc('__get_xmlFree') d like(xmlFreeFunc) d set_xmlFree pr extproc('__set_xmlFree') d func value like(xmlFreeFunc) d xmlFree pr extproc('__call_xmlFree') d mem * value void * d get_xmlMalloc pr extproc('__get_xmlMalloc') d like(xmlMallocFunc) d set_xmlMalloc pr extproc('__set_xmlMalloc') d func value like(xmlMallocFunc) d xmlMalloc pr * extproc('__call_xmlMalloc') void * d size value like(xmlCsize_t) d get_xmlMallocAtomic... d pr extproc('__get_xmlMallocAtomic') d like(xmlMallocFunc) d set_xmlMallocAtomic... d pr extproc('__set_xmlMallocAtomic') d func value like(xmlMallocFunc) d xmlMallocAtomic... d pr * extproc('__call_xmlMallocAtomic') void * d size value like(xmlCsize_t) d get_xmlRealloc pr extproc('__get_xmlRealloc') d like(xmlReallocFunc) d set_xmlRealloc pr extproc('__set_xmlRealloc') d func value like(xmlReallocFunc) d xmlRealloc pr * extproc('__call_xmlRealloc') void * d mem * value void * d size value like(xmlCsize_t) d get_xmlMemStrdup... d pr extproc('__get_xmlMemStrdup') d like(xmlStrdupFunc) d set_xmlMemStrdup... d pr extproc('__set_xmlMemstrdup') d func value like(xmlStrdupFunc) d xmlMemStrdup pr * extproc('__call_xmlMemStrdup') void * d str * value options(*string) const char * * The way to overload the existing functions. * The xmlGc function have an extra entry for atomic block * allocations useful for garbage collected memory allocators d xmlMemSetup pr extproc('xmlMemSetup') d like(xmlCint) d freeFunc value like(xmlFreeFunc) d mallocFunc value like(xmlMallocFunc) d reallocFunc value like(xmlReallocFunc) d strdupFunc value like(xmlStrdupFunc) d xmlMemGet pr extproc('xmlMemGet') d like(xmlCint) d freeFunc like(xmlFreeFunc) d mallocFunc like(xmlMallocFunc) d reallocFunc like(xmlReallocFunc) d strdupFunc like(xmlStrdupFunc) d xmlGcMemSetup pr extproc('xmlGcMemSetup') d like(xmlCint) d freeFunc value like(xmlFreeFunc) d mallocFunc value like(xmlMallocFunc) d mallocAtomicFunc... d value like(xmlMallocFunc) d reallocFunc value like(xmlReallocFunc) d strdupFunc value like(xmlStrdupFunc) d xmlGcMemGet pr extproc('xmlGcMemGet') d like(xmlCint) d freeFunc like(xmlFreeFunc) d mallocFunc like(xmlMallocFunc) d mallocAtomicFunc... d like(xmlMallocFunc) d reallocFunc like(xmlReallocFunc) d strdupFunc like(xmlStrdupFunc) * Initialization of the memory layer. d xmlInitMemory pr extproc('xmlInitMemory') d like(xmlCint) * Cleanup of the memory layer. d xmlCleanupMemory... d pr extproc('xmlCleanupMemory') * These are specific to the XML debug memory wrapper. d xmlMemUsed pr extproc('xmlMemUsed') d like(xmlCint) d xmlMemBlocks pr extproc('xmlMemBlocks') d like(xmlCint) d xmlMemDisplay pr extproc('xmlMemDisplay') d fp * value FILE * d xmlMmDisplayLast... d pr extproc('xmlMemDisplayLast') d fp * value FILE * d nbBytes value like(xmlClong) d xmlMemShow pr extproc('xmlMemShow') d fp * value FILE * d nr value like(xmlCint) d xmlMemoryDump pr extproc('xmlMemoryDump') d xmlMemMalloc pr * extproc('xmlMemMalloc') void * d size value like(xmlCsize_t) d xmlMemRealloc pr * extproc('xmlMemRealloc') void * d ptr * value void * d size value like(xmlCsize_t) d xmlMemFree pr extproc('xmlMemFree') d ptr * value void * d xmlMemoryStrdup... d pr * extproc('xmlMemoryStrdup') char * d str * value options(*string) const char * d xmlMallocLoc pr * extproc('xmlMallocLoc') void * d size value like(xmlCsize_t) d file * value options(*string) const char * d line value like(xmlCint) d xmlReallocLoc pr * extproc('xmlReallocLoc') void * d ptr * value void * d size value like(xmlCsize_t) d file * value options(*string) const char * d line value like(xmlCint) d xmlMallocAtomicLoc... d pr * extproc('xmlMallocAtomicLoc') void * d size value like(xmlCsize_t) d file * value options(*string) const char * d line value like(xmlCint) d xmlMemStrdupLoc... d pr * extproc('xmlMemStrdupLoc') char * d str * value options(*string) const char * d file * value options(*string) const char * d line value like(xmlCint) /if not defined(XML_GLOBALS_H) /if not defined(XML_THREADS_H__) /include "libxmlrpg/threads" /include "libxmlrpg/globals" /endif /endif /endif DEBUG_MEMORY_ALLOC__