VirtualBox

source: vbox/trunk/src/libs/libxml2-2.6.30/include/libxml/xmlmemory.h@ 31566

Last change on this file since 31566 was 6365, checked in by vboxsync, 17 years ago

Get rid of the sometimes very annoying libxml2 memory debugging output
for debug builds.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Revision Author Id
File size: 5.8 KB
Line 
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#ifndef VBOX /* Avoid spewing out boring libxml2 memory logging. */
30#ifdef DEBUG
31#ifndef DEBUG_MEMORY
32#define DEBUG_MEMORY
33#endif
34#endif
35#endif /* !VBOX */
36
37/**
38 * DEBUG_MEMORY_LOCATION:
39 *
40 * DEBUG_MEMORY_LOCATION should be activated only when debugging
41 * libxml i.e. if libxml has been configured with --with-debug-mem too.
42 */
43#ifdef DEBUG_MEMORY_LOCATION
44#endif
45
46#ifdef __cplusplus
47extern "C" {
48#endif
49
50/*
51 * The XML memory wrapper support 4 basic overloadable functions.
52 */
53/**
54 * xmlFreeFunc:
55 * @mem: an already allocated block of memory
56 *
57 * Signature for a free() implementation.
58 */
59typedef void (XMLCALL *xmlFreeFunc)(void *mem);
60/**
61 * xmlMallocFunc:
62 * @size: the size requested in bytes
63 *
64 * Signature for a malloc() implementation.
65 *
66 * Returns a pointer to the newly allocated block or NULL in case of error.
67 */
68typedef void *(XMLCALL *xmlMallocFunc)(size_t size);
69
70/**
71 * xmlReallocFunc:
72 * @mem: an already allocated block of memory
73 * @size: the new size requested in bytes
74 *
75 * Signature for a realloc() implementation.
76 *
77 * Returns a pointer to the newly reallocated block or NULL in case of error.
78 */
79typedef void *(XMLCALL *xmlReallocFunc)(void *mem, size_t size);
80
81/**
82 * xmlStrdupFunc:
83 * @str: a zero terminated string
84 *
85 * Signature for an strdup() implementation.
86 *
87 * Returns the copy of the string or NULL in case of error.
88 */
89typedef char *(XMLCALL *xmlStrdupFunc)(const char *str);
90
91/*
92 * The 4 interfaces used for all memory handling within libxml.
93LIBXML_DLL_IMPORT extern xmlFreeFunc xmlFree;
94LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMalloc;
95LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMallocAtomic;
96LIBXML_DLL_IMPORT extern xmlReallocFunc xmlRealloc;
97LIBXML_DLL_IMPORT extern xmlStrdupFunc xmlMemStrdup;
98 */
99
100/*
101 * The way to overload the existing functions.
102 * The xmlGc function have an extra entry for atomic block
103 * allocations useful for garbage collected memory allocators
104 */
105XMLPUBFUN int XMLCALL
106 xmlMemSetup (xmlFreeFunc freeFunc,
107 xmlMallocFunc mallocFunc,
108 xmlReallocFunc reallocFunc,
109 xmlStrdupFunc strdupFunc);
110XMLPUBFUN int XMLCALL
111 xmlMemGet (xmlFreeFunc *freeFunc,
112 xmlMallocFunc *mallocFunc,
113 xmlReallocFunc *reallocFunc,
114 xmlStrdupFunc *strdupFunc);
115XMLPUBFUN int XMLCALL
116 xmlGcMemSetup (xmlFreeFunc freeFunc,
117 xmlMallocFunc mallocFunc,
118 xmlMallocFunc mallocAtomicFunc,
119 xmlReallocFunc reallocFunc,
120 xmlStrdupFunc strdupFunc);
121XMLPUBFUN int XMLCALL
122 xmlGcMemGet (xmlFreeFunc *freeFunc,
123 xmlMallocFunc *mallocFunc,
124 xmlMallocFunc *mallocAtomicFunc,
125 xmlReallocFunc *reallocFunc,
126 xmlStrdupFunc *strdupFunc);
127
128/*
129 * Initialization of the memory layer.
130 */
131XMLPUBFUN int XMLCALL
132 xmlInitMemory (void);
133
134/*
135 * Cleanup of the memory layer.
136 */
137XMLPUBFUN void XMLCALL
138 xmlCleanupMemory (void);
139/*
140 * These are specific to the XML debug memory wrapper.
141 */
142XMLPUBFUN int XMLCALL
143 xmlMemUsed (void);
144XMLPUBFUN int XMLCALL
145 xmlMemBlocks (void);
146XMLPUBFUN void XMLCALL
147 xmlMemDisplay (FILE *fp);
148XMLPUBFUN void XMLCALL
149 xmlMemShow (FILE *fp, int nr);
150XMLPUBFUN void XMLCALL
151 xmlMemoryDump (void);
152XMLPUBFUN void * XMLCALL
153 xmlMemMalloc (size_t size);
154XMLPUBFUN void * XMLCALL
155 xmlMemRealloc (void *ptr,size_t size);
156XMLPUBFUN void XMLCALL
157 xmlMemFree (void *ptr);
158XMLPUBFUN char * XMLCALL
159 xmlMemoryStrdup (const char *str);
160XMLPUBFUN void * XMLCALL
161 xmlMallocLoc (size_t size, const char *file, int line);
162XMLPUBFUN void * XMLCALL
163 xmlReallocLoc (void *ptr, size_t size, const char *file, int line);
164XMLPUBFUN void * XMLCALL
165 xmlMallocAtomicLoc (size_t size, const char *file, int line);
166XMLPUBFUN 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
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette