/ libxml2 / include / libxml / xmlmemory.h
xmlmemory.h
  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