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>
41void * 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