xref: /freebsd/contrib/ntp/include/ntp_malloc.h (revision 13ea0450a9c8742119d36f3bf8f47accdce46e54)
1 /*
2  * Define malloc and friends.
3  */
4 #ifndef NTP_MALLOC_H
5 #define NTP_MALLOC_H
6 
7 #ifdef HAVE_STDLIB_H
8 # include <stdlib.h>
9 #else
10 # ifdef HAVE_MALLOC_H
11 #  include <malloc.h>
12 # endif
13 #endif
14 
15 /*
16  * Deal with platform differences declaring alloca()
17  * This comes nearly verbatim from:
18  *
19  * http://www.gnu.org/software/autoconf/manual/autoconf.html#Particular-Functions
20  *
21  * The only modifications were to remove C++ support and guard against
22  * redefining alloca.
23  */
24 #ifdef HAVE_ALLOCA_H
25 # include <alloca.h>
26 #elif defined __GNUC__
27 # ifndef alloca
28 #  define alloca __builtin_alloca
29 # endif
30 #elif defined _AIX
31 # ifndef alloca
32 #  define alloca __alloca
33 # endif
34 #elif defined _MSC_VER
35 # include <malloc.h>
36 # ifndef alloca
37 #  define alloca _alloca
38 # endif
39 #else
40 # include <stddef.h>
41 void * alloca(size_t);
42 #endif
43 
44 #ifdef EREALLOC_IMPL
45 # define EREALLOC_CALLSITE	/* preserve __FILE__ and __LINE__ */
46 #else
47 # define EREALLOC_IMPL(ptr, newsz, filenm, loc) \
48 	 realloc(ptr, (newsz))
49 #endif
50 
51 #ifdef HAVE_STRINGS_H
52 # include <strings.h>
53 # define zero_mem(p, s)		bzero(p, s)
54 #endif
55 
56 #ifndef zero_mem
57 # define zero_mem(p, s)		memset(p, 0, s)
58 #endif
59 #define ZERO(var)		zero_mem(&(var), sizeof(var))
60 
61 #endif	/* NTP_MALLOC_H */
62