| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- /*
- * 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: Daniel Veillard
- */
- #ifndef __DEBUG_MEMORY_ALLOC__
- #define __DEBUG_MEMORY_ALLOC__
- #include <stdio.h>
- #include <libxml/xmlversion.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * The XML memory wrapper support 4 basic overloadable functions.
- */
- /**
- * xmlFreeFunc:
- * @mem: an already allocated block of memory
- *
- * Signature for a free() implementation.
- */
- typedef void (*xmlFreeFunc)(void *mem);
- /**
- * 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.
- */
- typedef void *(LIBXML_ATTR_ALLOC_SIZE(1) *xmlMallocFunc)(size_t size);
- /**
- * 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.
- */
- typedef void *(*xmlReallocFunc)(void *mem, size_t size);
- /**
- * xmlStrdupFunc:
- * @str: a zero terminated string
- *
- * Signature for an strdup() implementation.
- *
- * Returns the copy of the string or NULL in case of error.
- */
- typedef char *(*xmlStrdupFunc)(const char *str);
- /*
- * In general the memory allocation entry points are not kept
- * thread specific but this can be overridden by LIBXML_THREAD_ALLOC_ENABLED
- * - xmlMalloc
- * - xmlMallocAtomic
- * - xmlRealloc
- * - xmlMemStrdup
- * - xmlFree
- */
- /** DOC_DISABLE */
- #ifdef LIBXML_THREAD_ALLOC_ENABLED
- #define XML_GLOBALS_ALLOC \
- XML_OP(xmlMalloc, xmlMallocFunc, XML_NO_ATTR) \
- XML_OP(xmlMallocAtomic, xmlMallocFunc, XML_NO_ATTR) \
- XML_OP(xmlRealloc, xmlReallocFunc, XML_NO_ATTR) \
- XML_OP(xmlFree, xmlFreeFunc, XML_NO_ATTR) \
- XML_OP(xmlMemStrdup, xmlStrdupFunc, XML_NO_ATTR)
- #define XML_OP XML_DECLARE_GLOBAL
- XML_GLOBALS_ALLOC
- #undef XML_OP
- #if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION)
- #define xmlMalloc XML_GLOBAL_MACRO(xmlMalloc)
- #define xmlMallocAtomic XML_GLOBAL_MACRO(xmlMallocAtomic)
- #define xmlRealloc XML_GLOBAL_MACRO(xmlRealloc)
- #define xmlFree XML_GLOBAL_MACRO(xmlFree)
- #define xmlMemStrdup XML_GLOBAL_MACRO(xmlMemStrdup)
- #endif
- #else
- #define XML_GLOBALS_ALLOC
- /** DOC_ENABLE */
- XMLPUBVAR xmlMallocFunc xmlMalloc;
- XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
- XMLPUBVAR xmlReallocFunc xmlRealloc;
- XMLPUBVAR xmlFreeFunc xmlFree;
- XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
- #endif
- /*
- * The way to overload the existing functions.
- * The xmlGc function have an extra entry for atomic block
- * allocations useful for garbage collected memory allocators
- */
- XMLPUBFUN int
- xmlMemSetup (xmlFreeFunc freeFunc,
- xmlMallocFunc mallocFunc,
- xmlReallocFunc reallocFunc,
- xmlStrdupFunc strdupFunc);
- XMLPUBFUN int
- xmlMemGet (xmlFreeFunc *freeFunc,
- xmlMallocFunc *mallocFunc,
- xmlReallocFunc *reallocFunc,
- xmlStrdupFunc *strdupFunc);
- XMLPUBFUN int
- xmlGcMemSetup (xmlFreeFunc freeFunc,
- xmlMallocFunc mallocFunc,
- xmlMallocFunc mallocAtomicFunc,
- xmlReallocFunc reallocFunc,
- xmlStrdupFunc strdupFunc);
- XMLPUBFUN int
- xmlGcMemGet (xmlFreeFunc *freeFunc,
- xmlMallocFunc *mallocFunc,
- xmlMallocFunc *mallocAtomicFunc,
- xmlReallocFunc *reallocFunc,
- xmlStrdupFunc *strdupFunc);
- /*
- * Initialization of the memory layer.
- */
- XML_DEPRECATED
- XMLPUBFUN int
- xmlInitMemory (void);
- /*
- * Cleanup of the memory layer.
- */
- XML_DEPRECATED
- XMLPUBFUN void
- xmlCleanupMemory (void);
- /*
- * These are specific to the XML debug memory wrapper.
- */
- XMLPUBFUN size_t
- xmlMemSize (void *ptr);
- XMLPUBFUN int
- xmlMemUsed (void);
- XMLPUBFUN int
- xmlMemBlocks (void);
- XML_DEPRECATED
- XMLPUBFUN void
- xmlMemDisplay (FILE *fp);
- XML_DEPRECATED
- XMLPUBFUN void
- xmlMemDisplayLast(FILE *fp, long nbBytes);
- XML_DEPRECATED
- XMLPUBFUN void
- xmlMemShow (FILE *fp, int nr);
- XML_DEPRECATED
- XMLPUBFUN void
- xmlMemoryDump (void);
- XMLPUBFUN void *
- xmlMemMalloc (size_t size) LIBXML_ATTR_ALLOC_SIZE(1);
- XMLPUBFUN void *
- xmlMemRealloc (void *ptr,size_t size);
- XMLPUBFUN void
- xmlMemFree (void *ptr);
- XMLPUBFUN char *
- xmlMemoryStrdup (const char *str);
- XML_DEPRECATED
- XMLPUBFUN void *
- xmlMallocLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
- XML_DEPRECATED
- XMLPUBFUN void *
- xmlReallocLoc (void *ptr, size_t size, const char *file, int line);
- XML_DEPRECATED
- XMLPUBFUN void *
- xmlMallocAtomicLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
- XML_DEPRECATED
- XMLPUBFUN char *
- xmlMemStrdupLoc (const char *str, const char *file, int line);
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
- #endif /* __DEBUG_MEMORY_ALLOC__ */
|