]>
Commit | Line | Data |
---|---|---|
ad3c9f2a A |
1 | /* |
2 | xmalloc.h - Simple malloc debugging library API | |
3 | ||
4 | This software is released under a BSD-style license. | |
5 | See the file LICENSE for details and copyright. | |
6 | ||
7 | */ | |
8 | ||
9 | #ifndef _XMALLOC_H | |
10 | #define _XMALLOC_H 1 | |
11 | ||
12 | void *xmalloc_impl(size_t size, const char *file, int line, const char *func); | |
13 | void *xcalloc_impl(size_t nmemb, size_t size, const char *file, int line, | |
14 | const char *func); | |
15 | void xfree_impl(void *ptr, const char *file, int line, const char *func); | |
16 | void *xrealloc_impl(void *ptr, size_t new_size, const char *file, int line, | |
17 | const char *func); | |
18 | int xmalloc_dump_leaks(void); | |
19 | void xmalloc_configure(int fail_after); | |
20 | ||
21 | ||
22 | #ifndef XMALLOC_INTERNAL | |
23 | #ifdef MALLOC_DEBUGGING | |
24 | ||
25 | /* Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__' | |
26 | which contains the name of the function currently being defined. | |
27 | # define __XMALLOC_FUNCTION __PRETTY_FUNCTION__ | |
28 | This is broken in G++ before version 2.6. | |
29 | C9x has a similar variable called __func__, but prefer the GCC one since | |
30 | it demangles C++ function names. */ | |
31 | # ifdef __GNUC__ | |
32 | # if __GNUC__ > 2 || (__GNUC__ == 2 \ | |
33 | && __GNUC_MINOR__ >= (defined __cplusplus ? 6 : 4)) | |
34 | # define __XMALLOC_FUNCTION __PRETTY_FUNCTION__ | |
35 | # else | |
36 | # define __XMALLOC_FUNCTION ((const char *) 0) | |
37 | # endif | |
38 | # else | |
39 | # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L | |
40 | # define __XMALLOC_FUNCTION __func__ | |
41 | # else | |
42 | # define __XMALLOC_FUNCTION ((const char *) 0) | |
43 | # endif | |
44 | # endif | |
45 | ||
46 | #define xmalloc(size) xmalloc_impl(size, __FILE__, __LINE__, \ | |
47 | __XMALLOC_FUNCTION) | |
48 | #define xcalloc(nmemb, size) xcalloc_impl(nmemb, size, __FILE__, __LINE__, \ | |
49 | __XMALLOC_FUNCTION) | |
50 | #define xfree(ptr) xfree_impl(ptr, __FILE__, __LINE__, __XMALLOC_FUNCTION) | |
51 | #define xrealloc(ptr, new_size) xrealloc_impl(ptr, new_size, __FILE__, \ | |
52 | __LINE__, __XMALLOC_FUNCTION) | |
53 | #undef malloc | |
54 | #undef calloc | |
55 | #undef free | |
56 | #undef realloc | |
57 | ||
58 | #define malloc USE_XMALLOC_INSTEAD_OF_MALLOC | |
59 | #define calloc USE_XCALLOC_INSTEAD_OF_CALLOC | |
60 | #define free USE_XFREE_INSTEAD_OF_FREE | |
61 | #define realloc USE_XREALLOC_INSTEAD_OF_REALLOC | |
62 | ||
63 | #else /* !MALLOC_DEBUGGING */ | |
64 | ||
65 | #include <stdlib.h> | |
66 | ||
67 | #define xmalloc(size) malloc(size) | |
68 | #define xcalloc(nmemb, size) calloc(nmemb, size) | |
69 | #define xfree(ptr) free(ptr) | |
70 | #define xrealloc(ptr, new_size) realloc(ptr, new_size) | |
71 | ||
72 | #endif /* !MALLOC_DEBUGGING */ | |
73 | #endif /* !XMALLOC_INTERNAL */ | |
74 | ||
75 | #endif /* _XMALLOC_H */ | |
76 | ||
77 | /* EOF */ |