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