Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/xml2/include/libxml/xmlmemory.h
4394 views
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
#ifdef __cplusplus
19
extern "C" {
20
#endif
21
22
/*
23
* The XML memory wrapper support 4 basic overloadable functions.
24
*/
25
/**
26
* xmlFreeFunc:
27
* @mem: an already allocated block of memory
28
*
29
* Signature for a free() implementation.
30
*/
31
typedef void (*xmlFreeFunc)(void *mem);
32
/**
33
* xmlMallocFunc:
34
* @size: the size requested in bytes
35
*
36
* Signature for a malloc() implementation.
37
*
38
* Returns a pointer to the newly allocated block or NULL in case of error.
39
*/
40
typedef void *(LIBXML_ATTR_ALLOC_SIZE(1) *xmlMallocFunc)(size_t size);
41
42
/**
43
* xmlReallocFunc:
44
* @mem: an already allocated block of memory
45
* @size: the new size requested in bytes
46
*
47
* Signature for a realloc() implementation.
48
*
49
* Returns a pointer to the newly reallocated block or NULL in case of error.
50
*/
51
typedef void *(*xmlReallocFunc)(void *mem, size_t size);
52
53
/**
54
* xmlStrdupFunc:
55
* @str: a zero terminated string
56
*
57
* Signature for an strdup() implementation.
58
*
59
* Returns the copy of the string or NULL in case of error.
60
*/
61
typedef char *(*xmlStrdupFunc)(const char *str);
62
63
/*
64
* In general the memory allocation entry points are not kept
65
* thread specific but this can be overridden by LIBXML_THREAD_ALLOC_ENABLED
66
* - xmlMalloc
67
* - xmlMallocAtomic
68
* - xmlRealloc
69
* - xmlMemStrdup
70
* - xmlFree
71
*/
72
/** DOC_DISABLE */
73
#ifdef LIBXML_THREAD_ALLOC_ENABLED
74
#define XML_GLOBALS_ALLOC \
75
XML_OP(xmlMalloc, xmlMallocFunc, XML_NO_ATTR) \
76
XML_OP(xmlMallocAtomic, xmlMallocFunc, XML_NO_ATTR) \
77
XML_OP(xmlRealloc, xmlReallocFunc, XML_NO_ATTR) \
78
XML_OP(xmlFree, xmlFreeFunc, XML_NO_ATTR) \
79
XML_OP(xmlMemStrdup, xmlStrdupFunc, XML_NO_ATTR)
80
#define XML_OP XML_DECLARE_GLOBAL
81
XML_GLOBALS_ALLOC
82
#undef XML_OP
83
#if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION)
84
#define xmlMalloc XML_GLOBAL_MACRO(xmlMalloc)
85
#define xmlMallocAtomic XML_GLOBAL_MACRO(xmlMallocAtomic)
86
#define xmlRealloc XML_GLOBAL_MACRO(xmlRealloc)
87
#define xmlFree XML_GLOBAL_MACRO(xmlFree)
88
#define xmlMemStrdup XML_GLOBAL_MACRO(xmlMemStrdup)
89
#endif
90
#else
91
#define XML_GLOBALS_ALLOC
92
/** DOC_ENABLE */
93
XMLPUBVAR xmlMallocFunc xmlMalloc;
94
XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
95
XMLPUBVAR xmlReallocFunc xmlRealloc;
96
XMLPUBVAR xmlFreeFunc xmlFree;
97
XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
98
#endif
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
*/
105
XMLPUBFUN int
106
xmlMemSetup (xmlFreeFunc freeFunc,
107
xmlMallocFunc mallocFunc,
108
xmlReallocFunc reallocFunc,
109
xmlStrdupFunc strdupFunc);
110
XMLPUBFUN int
111
xmlMemGet (xmlFreeFunc *freeFunc,
112
xmlMallocFunc *mallocFunc,
113
xmlReallocFunc *reallocFunc,
114
xmlStrdupFunc *strdupFunc);
115
XMLPUBFUN int
116
xmlGcMemSetup (xmlFreeFunc freeFunc,
117
xmlMallocFunc mallocFunc,
118
xmlMallocFunc mallocAtomicFunc,
119
xmlReallocFunc reallocFunc,
120
xmlStrdupFunc strdupFunc);
121
XMLPUBFUN int
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
*/
131
XML_DEPRECATED
132
XMLPUBFUN int
133
xmlInitMemory (void);
134
135
/*
136
* Cleanup of the memory layer.
137
*/
138
XML_DEPRECATED
139
XMLPUBFUN void
140
xmlCleanupMemory (void);
141
/*
142
* These are specific to the XML debug memory wrapper.
143
*/
144
XMLPUBFUN size_t
145
xmlMemSize (void *ptr);
146
XMLPUBFUN int
147
xmlMemUsed (void);
148
XMLPUBFUN int
149
xmlMemBlocks (void);
150
XMLPUBFUN void
151
xmlMemDisplay (FILE *fp);
152
XMLPUBFUN void
153
xmlMemDisplayLast(FILE *fp, long nbBytes);
154
XMLPUBFUN void
155
xmlMemShow (FILE *fp, int nr);
156
XMLPUBFUN void
157
xmlMemoryDump (void);
158
XMLPUBFUN void *
159
xmlMemMalloc (size_t size) LIBXML_ATTR_ALLOC_SIZE(1);
160
XMLPUBFUN void *
161
xmlMemRealloc (void *ptr,size_t size);
162
XMLPUBFUN void
163
xmlMemFree (void *ptr);
164
XMLPUBFUN char *
165
xmlMemoryStrdup (const char *str);
166
XMLPUBFUN void *
167
xmlMallocLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
168
XMLPUBFUN void *
169
xmlReallocLoc (void *ptr, size_t size, const char *file, int line);
170
XMLPUBFUN void *
171
xmlMallocAtomicLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
172
XMLPUBFUN char *
173
xmlMemStrdupLoc (const char *str, const char *file, int line);
174
175
176
/** DOC_DISABLE */
177
#ifdef DEBUG_MEMORY_LOCATION
178
/**
179
* xmlMalloc:
180
* @size: number of bytes to allocate
181
*
182
* Wrapper for the malloc() function used in the XML library.
183
*
184
* Returns the pointer to the allocated area or NULL in case of error.
185
*/
186
#define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
187
/**
188
* xmlMallocAtomic:
189
* @size: number of bytes to allocate
190
*
191
* Wrapper for the malloc() function used in the XML library for allocation
192
* of block not containing pointers to other areas.
193
*
194
* Returns the pointer to the allocated area or NULL in case of error.
195
*/
196
#define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
197
/**
198
* xmlRealloc:
199
* @ptr: pointer to the existing allocated area
200
* @size: number of bytes to allocate
201
*
202
* Wrapper for the realloc() function used in the XML library.
203
*
204
* Returns the pointer to the allocated area or NULL in case of error.
205
*/
206
#define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
207
/**
208
* xmlMemStrdup:
209
* @str: pointer to the existing string
210
*
211
* Wrapper for the strdup() function, xmlStrdup() is usually preferred.
212
*
213
* Returns the pointer to the allocated area or NULL in case of error.
214
*/
215
#define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
216
217
#endif /* DEBUG_MEMORY_LOCATION */
218
/** DOC_ENABLE */
219
220
#ifdef __cplusplus
221
}
222
#endif /* __cplusplus */
223
224
#endif /* __DEBUG_MEMORY_ALLOC__ */
225
226