Annotation of embedaddon/libxml2/include/libxml/xmlmemory.h, revision 1.1.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>