]> git.saurik.com Git - apple/libc.git/blame - regex/TRE/lib/xmalloc.h
Libc-825.24.tar.gz
[apple/libc.git] / regex / TRE / lib / xmalloc.h
CommitLineData
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
12void *xmalloc_impl(size_t size, const char *file, int line, const char *func);
13void *xcalloc_impl(size_t nmemb, size_t size, const char *file, int line,
14 const char *func);
15void xfree_impl(void *ptr, const char *file, int line, const char *func);
16void *xrealloc_impl(void *ptr, size_t new_size, const char *file, int line,
17 const char *func);
18int xmalloc_dump_leaks(void);
19void 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 */