• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/timemachine/gettext-0.17/gnulib-local/lib/libxml/
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
45extern "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 */
57typedef 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 */
66typedef void *(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 */
77typedef 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 */
87typedef char *(XMLCALL *xmlStrdupFunc)(const char *str);
88
89/*
90 * The 4 interfaces used for all memory handling within libxml.
91LIBXML_DLL_IMPORT extern xmlFreeFunc xmlFree;
92LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMalloc;
93LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMallocAtomic;
94LIBXML_DLL_IMPORT extern xmlReallocFunc xmlRealloc;
95LIBXML_DLL_IMPORT extern 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 */
103XMLPUBFUN int XMLCALL
104	xmlMemSetup	(xmlFreeFunc freeFunc,
105			 xmlMallocFunc mallocFunc,
106			 xmlReallocFunc reallocFunc,
107			 xmlStrdupFunc strdupFunc);
108XMLPUBFUN int XMLCALL
109	xmlMemGet	(xmlFreeFunc *freeFunc,
110			 xmlMallocFunc *mallocFunc,
111			 xmlReallocFunc *reallocFunc,
112			 xmlStrdupFunc *strdupFunc);
113XMLPUBFUN int XMLCALL
114	xmlGcMemSetup	(xmlFreeFunc freeFunc,
115			 xmlMallocFunc mallocFunc,
116			 xmlMallocFunc mallocAtomicFunc,
117			 xmlReallocFunc reallocFunc,
118			 xmlStrdupFunc strdupFunc);
119XMLPUBFUN 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 */
129XMLPUBFUN int XMLCALL
130	xmlInitMemory	(void);
131
132/*
133 * Cleanup of the memory layer.
134 */
135XMLPUBFUN void XMLCALL
136                xmlCleanupMemory        (void);
137/*
138 * These are specific to the XML debug memory wrapper.
139 */
140XMLPUBFUN int XMLCALL
141	xmlMemUsed	(void);
142XMLPUBFUN int XMLCALL
143	xmlMemBlocks	(void);
144XMLPUBFUN void XMLCALL
145	xmlMemDisplay	(FILE *fp);
146XMLPUBFUN void XMLCALL
147	xmlMemShow	(FILE *fp, int nr);
148XMLPUBFUN void XMLCALL
149	xmlMemoryDump	(void);
150XMLPUBFUN void * XMLCALL
151	xmlMemMalloc	(size_t size);
152XMLPUBFUN void * XMLCALL
153	xmlMemRealloc	(void *ptr,size_t size);
154XMLPUBFUN void XMLCALL
155	xmlMemFree	(void *ptr);
156XMLPUBFUN char * XMLCALL
157	xmlMemoryStrdup	(const char *str);
158XMLPUBFUN void * XMLCALL
159	xmlMallocLoc	(size_t size, const char *file, int line);
160XMLPUBFUN void * XMLCALL
161	xmlReallocLoc	(void *ptr, size_t size, const char *file, int line);
162XMLPUBFUN void * XMLCALL
163	xmlMallocAtomicLoc (size_t size, const char *file, int line);
164XMLPUBFUN char * XMLCALL
165	xmlMemStrdupLoc	(const char *str, const char *file, int line);
166
167
168#ifdef DEBUG_MEMORY_LOCATION
169/**
170 * xmlMalloc:
171 * @size:  number of bytes to allocate
172 *
173 * Wrapper for the malloc() function used in the XML library.
174 *
175 * Returns the pointer to the allocated area or NULL in case of error.
176 */
177#define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
178/**
179 * xmlMallocAtomic:
180 * @size:  number of bytes to allocate
181 *
182 * Wrapper for the malloc() function used in the XML library for allocation
183 * of block not containing pointers to other areas.
184 *
185 * Returns the pointer to the allocated area or NULL in case of error.
186 */
187#define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
188/**
189 * xmlRealloc:
190 * @ptr:  pointer to the existing allocated area
191 * @size:  number of bytes to allocate
192 *
193 * Wrapper for the realloc() function used in the XML library.
194 *
195 * Returns the pointer to the allocated area or NULL in case of error.
196 */
197#define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
198/**
199 * xmlMemStrdup:
200 * @str:  pointer to the existing string
201 *
202 * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
203 *
204 * Returns the pointer to the allocated area or NULL in case of error.
205 */
206#define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
207
208#endif /* DEBUG_MEMORY_LOCATION */
209
210#ifdef __cplusplus
211}
212#endif /* __cplusplus */
213
214#ifndef __XML_GLOBALS_H
215#ifndef __XML_THREADS_H__
216#include <libxml/threads.h>
217#include <libxml/globals.h>
218#endif
219#endif
220
221#endif  /* __DEBUG_MEMORY_ALLOC__ */
222
223