11 #ifndef TOR_UTIL_MALLOC_H
12 #define TOR_UTIL_MALLOC_H
22 void *
tor_calloc_(
size_t nmemb,
size_t size) ATTR_MALLOC;
47 #define tor_free(p) STMT_BEGIN \
48 typeof(&(p)) tor_free__tmpvar = &(p); \
49 _Static_assert(!__builtin_types_compatible_p(typeof(*tor_free__tmpvar), \
51 "use tor_event_free for struct event *"); \
52 raw_free(*tor_free__tmpvar); \
53 *tor_free__tmpvar=NULL; \
56 #define tor_free(p) STMT_BEGIN \
62 #define tor_malloc(size) tor_malloc_(size)
63 #define tor_malloc_zero(size) tor_malloc_zero_(size)
64 #define tor_calloc(nmemb,size) tor_calloc_(nmemb, size)
65 #define tor_realloc(ptr, size) tor_realloc_(ptr, size)
66 #define tor_reallocarray(ptr, sz1, sz2) \
67 tor_reallocarray_((ptr), (sz1), (sz2))
68 #define tor_strdup(s) tor_strdup_(s)
69 #define tor_strndup(s, n) tor_strndup_(s, n)
70 #define tor_memdup(s, n) tor_memdup_(s, n)
71 #define tor_memdup_nulterm(s, n) tor_memdup_nulterm_(s, n)
76 #define raw_malloc malloc
77 #define raw_realloc realloc
79 #define raw_strdup strdup
84 #define FREE_AND_NULL(typename, freefn, var) \
87 typename **tmp__free__ptr ## freefn = &(var); \
88 freefn(*tmp__free__ptr ## freefn); \
89 (*tmp__free__ptr ## freefn) = NULL; \
92 #ifdef UTIL_MALLOC_PRIVATE
Utility macros to handle different features and behavior in different compilers.
STATIC int size_mul_check(const size_t x, const size_t y)
void * tor_memdup_(const void *mem, size_t len) ATTR_MALLOC
void * tor_reallocarray_(void *ptr, size_t size1, size_t size2)
void tor_free_(void *mem)
void * tor_realloc_(void *ptr, size_t size)
void * tor_memdup_nulterm_(const void *mem, size_t len) ATTR_MALLOC
char * tor_strndup_(const char *s, size_t n) ATTR_MALLOC
char * tor_strdup_(const char *s) ATTR_MALLOC
void * tor_calloc_(size_t nmemb, size_t size) ATTR_MALLOC
void * tor_malloc_zero_(size_t size) ATTR_MALLOC
void * tor_malloc_(size_t size) ATTR_MALLOC