File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / include / libxml / xmlmemory.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:37:58 2012 UTC (12 years, 6 months ago) by misho
Branches: libxml2, MAIN
CVS tags: v2_9_1p0, v2_9_1, v2_8_0p0, v2_8_0, v2_7_8, HEAD
libxml2

    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>