Annotation of embedaddon/libxml2/include/libxml/xmlmemory.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Summary: interface for the memory allocator
! 3: * Description: provides interfaces for the memory allocator,
! 4: * including debugging capabilities.
! 5: *
! 6: * Copy: See Copyright for the status of this software.
! 7: *
! 8: * Author: Daniel Veillard
! 9: */
! 10:
! 11:
! 12: #ifndef __DEBUG_MEMORY_ALLOC__
! 13: #define __DEBUG_MEMORY_ALLOC__
! 14:
! 15: #include <stdio.h>
! 16: #include <libxml/xmlversion.h>
! 17:
! 18: /**
! 19: * DEBUG_MEMORY:
! 20: *
! 21: * DEBUG_MEMORY replaces the allocator with a collect and debug
! 22: * shell to the libc allocator.
! 23: * DEBUG_MEMORY should only be activated when debugging
! 24: * libxml i.e. if libxml has been configured with --with-debug-mem too.
! 25: */
! 26: /* #define DEBUG_MEMORY_FREED */
! 27: /* #define DEBUG_MEMORY_LOCATION */
! 28:
! 29: #ifdef DEBUG
! 30: #ifndef DEBUG_MEMORY
! 31: #define DEBUG_MEMORY
! 32: #endif
! 33: #endif
! 34:
! 35: /**
! 36: * DEBUG_MEMORY_LOCATION:
! 37: *
! 38: * DEBUG_MEMORY_LOCATION should be activated only when debugging
! 39: * libxml i.e. if libxml has been configured with --with-debug-mem too.
! 40: */
! 41: #ifdef DEBUG_MEMORY_LOCATION
! 42: #endif
! 43:
! 44: #ifdef __cplusplus
! 45: extern "C" {
! 46: #endif
! 47:
! 48: /*
! 49: * The XML memory wrapper support 4 basic overloadable functions.
! 50: */
! 51: /**
! 52: * xmlFreeFunc:
! 53: * @mem: an already allocated block of memory
! 54: *
! 55: * Signature for a free() implementation.
! 56: */
! 57: typedef void (XMLCALL *xmlFreeFunc)(void *mem);
! 58: /**
! 59: * xmlMallocFunc:
! 60: * @size: the size requested in bytes
! 61: *
! 62: * Signature for a malloc() implementation.
! 63: *
! 64: * Returns a pointer to the newly allocated block or NULL in case of error.
! 65: */
! 66: typedef void *(LIBXML_ATTR_ALLOC_SIZE(1) XMLCALL *xmlMallocFunc)(size_t size);
! 67:
! 68: /**
! 69: * xmlReallocFunc:
! 70: * @mem: an already allocated block of memory
! 71: * @size: the new size requested in bytes
! 72: *
! 73: * Signature for a realloc() implementation.
! 74: *
! 75: * Returns a pointer to the newly reallocated block or NULL in case of error.
! 76: */
! 77: typedef void *(XMLCALL *xmlReallocFunc)(void *mem, size_t size);
! 78:
! 79: /**
! 80: * xmlStrdupFunc:
! 81: * @str: a zero terminated string
! 82: *
! 83: * Signature for an strdup() implementation.
! 84: *
! 85: * Returns the copy of the string or NULL in case of error.
! 86: */
! 87: typedef char *(XMLCALL *xmlStrdupFunc)(const char *str);
! 88:
! 89: /*
! 90: * The 4 interfaces used for all memory handling within libxml.
! 91: LIBXML_DLL_IMPORT xmlFreeFunc xmlFree;
! 92: LIBXML_DLL_IMPORT xmlMallocFunc xmlMalloc;
! 93: LIBXML_DLL_IMPORT xmlMallocFunc xmlMallocAtomic;
! 94: LIBXML_DLL_IMPORT xmlReallocFunc xmlRealloc;
! 95: LIBXML_DLL_IMPORT xmlStrdupFunc xmlMemStrdup;
! 96: */
! 97:
! 98: /*
! 99: * The way to overload the existing functions.
! 100: * The xmlGc function have an extra entry for atomic block
! 101: * allocations useful for garbage collected memory allocators
! 102: */
! 103: XMLPUBFUN int XMLCALL
! 104: xmlMemSetup (xmlFreeFunc freeFunc,
! 105: xmlMallocFunc mallocFunc,
! 106: xmlReallocFunc reallocFunc,
! 107: xmlStrdupFunc strdupFunc);
! 108: XMLPUBFUN int XMLCALL
! 109: xmlMemGet (xmlFreeFunc *freeFunc,
! 110: xmlMallocFunc *mallocFunc,
! 111: xmlReallocFunc *reallocFunc,
! 112: xmlStrdupFunc *strdupFunc);
! 113: XMLPUBFUN int XMLCALL
! 114: xmlGcMemSetup (xmlFreeFunc freeFunc,
! 115: xmlMallocFunc mallocFunc,
! 116: xmlMallocFunc mallocAtomicFunc,
! 117: xmlReallocFunc reallocFunc,
! 118: xmlStrdupFunc strdupFunc);
! 119: XMLPUBFUN int XMLCALL
! 120: xmlGcMemGet (xmlFreeFunc *freeFunc,
! 121: xmlMallocFunc *mallocFunc,
! 122: xmlMallocFunc *mallocAtomicFunc,
! 123: xmlReallocFunc *reallocFunc,
! 124: xmlStrdupFunc *strdupFunc);
! 125:
! 126: /*
! 127: * Initialization of the memory layer.
! 128: */
! 129: XMLPUBFUN int XMLCALL
! 130: xmlInitMemory (void);
! 131:
! 132: /*
! 133: * Cleanup of the memory layer.
! 134: */
! 135: XMLPUBFUN void XMLCALL
! 136: xmlCleanupMemory (void);
! 137: /*
! 138: * These are specific to the XML debug memory wrapper.
! 139: */
! 140: XMLPUBFUN int XMLCALL
! 141: xmlMemUsed (void);
! 142: XMLPUBFUN int XMLCALL
! 143: xmlMemBlocks (void);
! 144: XMLPUBFUN void XMLCALL
! 145: xmlMemDisplay (FILE *fp);
! 146: XMLPUBFUN void XMLCALL
! 147: xmlMemDisplayLast(FILE *fp, long nbBytes);
! 148: XMLPUBFUN void XMLCALL
! 149: xmlMemShow (FILE *fp, int nr);
! 150: XMLPUBFUN void XMLCALL
! 151: xmlMemoryDump (void);
! 152: XMLPUBFUN void * XMLCALL
! 153: xmlMemMalloc (size_t size) LIBXML_ATTR_ALLOC_SIZE(1);
! 154: XMLPUBFUN void * XMLCALL
! 155: xmlMemRealloc (void *ptr,size_t size);
! 156: XMLPUBFUN void XMLCALL
! 157: xmlMemFree (void *ptr);
! 158: XMLPUBFUN char * XMLCALL
! 159: xmlMemoryStrdup (const char *str);
! 160: XMLPUBFUN void * XMLCALL
! 161: xmlMallocLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
! 162: XMLPUBFUN void * XMLCALL
! 163: xmlReallocLoc (void *ptr, size_t size, const char *file, int line);
! 164: XMLPUBFUN void * XMLCALL
! 165: xmlMallocAtomicLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
! 166: XMLPUBFUN char * XMLCALL
! 167: xmlMemStrdupLoc (const char *str, const char *file, int line);
! 168:
! 169:
! 170: #ifdef DEBUG_MEMORY_LOCATION
! 171: /**
! 172: * xmlMalloc:
! 173: * @size: number of bytes to allocate
! 174: *
! 175: * Wrapper for the malloc() function used in the XML library.
! 176: *
! 177: * Returns the pointer to the allocated area or NULL in case of error.
! 178: */
! 179: #define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
! 180: /**
! 181: * xmlMallocAtomic:
! 182: * @size: number of bytes to allocate
! 183: *
! 184: * Wrapper for the malloc() function used in the XML library for allocation
! 185: * of block not containing pointers to other areas.
! 186: *
! 187: * Returns the pointer to the allocated area or NULL in case of error.
! 188: */
! 189: #define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
! 190: /**
! 191: * xmlRealloc:
! 192: * @ptr: pointer to the existing allocated area
! 193: * @size: number of bytes to allocate
! 194: *
! 195: * Wrapper for the realloc() function used in the XML library.
! 196: *
! 197: * Returns the pointer to the allocated area or NULL in case of error.
! 198: */
! 199: #define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
! 200: /**
! 201: * xmlMemStrdup:
! 202: * @str: pointer to the existing string
! 203: *
! 204: * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
! 205: *
! 206: * Returns the pointer to the allocated area or NULL in case of error.
! 207: */
! 208: #define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
! 209:
! 210: #endif /* DEBUG_MEMORY_LOCATION */
! 211:
! 212: #ifdef __cplusplus
! 213: }
! 214: #endif /* __cplusplus */
! 215:
! 216: #ifndef __XML_GLOBALS_H
! 217: #ifndef __XML_THREADS_H__
! 218: #include <libxml/threads.h>
! 219: #include <libxml/globals.h>
! 220: #endif
! 221: #endif
! 222:
! 223: #endif /* __DEBUG_MEMORY_ALLOC__ */
! 224:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>