30#ifndef _ASTERISK_ASTMM_H
31#define _ASTERISK_ASTMM_H
50void __ast_free(
void *ptr,
const char *
file,
int lineno,
const char *func);
51void *
__ast_realloc(
void *ptr,
size_t size,
const char *
file,
int lineno,
const char *func);
54int __ast_asprintf(
const char *
file,
int lineno,
const char *func,
char **strp,
const char *format, ...)
55 __attribute__((format(printf, 5, 6)));
56int __ast_vasprintf(
char **strp, const
char *format, va_list ap, const
char *
file,
int lineno, const
char *func)
57 __attribute__((format(printf, 2, 0)));
67 __attribute__((format(printf, 5, 6)));
69 __attribute__((format(printf, 2, 0)));
99#define ASTMM_REDIRECT 1
109#define ASTMM_IGNORE 2
113#if !defined(ASTMM_LIBC)
115#define ASTMM_LIBC ASTMM_BLOCK
118#if ASTMM_LIBC == ASTMM_IGNORE
132#if ASTMM_LIBC == ASTMM_REDIRECT
135#define calloc(nmemb, size) \
136 __ast_repl_calloc(nmemb, size, __FILE__, __LINE__, __PRETTY_FUNCTION__)
137#define malloc(size) \
138 __ast_repl_malloc(size, __FILE__, __LINE__, __PRETTY_FUNCTION__)
140 __ast_free(ptr, __FILE__, __LINE__, __PRETTY_FUNCTION__)
141#define realloc(ptr, size) \
142 __ast_repl_realloc(ptr, size, __FILE__, __LINE__, __PRETTY_FUNCTION__)
144 __ast_repl_strdup(s, __FILE__, __LINE__, __PRETTY_FUNCTION__)
145#define strndup(s, n) \
146 __ast_repl_strndup(s, n, __FILE__, __LINE__, __PRETTY_FUNCTION__)
147#define asprintf(strp, format, args...) \
148 __ast_repl_asprintf(__FILE__, __LINE__, __PRETTY_FUNCTION__, strp, format, args)
149#define vasprintf(strp, format, ap) \
150 __ast_repl_vasprintf(strp, format, ap, __FILE__, __LINE__, __PRETTY_FUNCTION__)
152#elif ASTMM_LIBC == ASTMM_BLOCK
155#define calloc(a, b) \
156 Do_not_use_calloc__use_ast_calloc->fail(a, b)
158 Do_not_use_malloc__use_ast_malloc->fail(a)
160 Do_not_use_free__use_ast_free_or_ast_std_free_for_remotely_allocated_memory->fail(a)
161#define realloc(a, b) \
162 Do_not_use_realloc__use_ast_realloc->fail(a, b)
164 Do_not_use_strdup__use_ast_strdup->fail(a)
165#define strndup(a, b) \
166 Do_not_use_strndup__use_ast_strndup->fail(a, b)
167#define asprintf(a, b, c...) \
168 Do_not_use_asprintf__use_ast_asprintf->fail(a, b, c)
169#define vasprintf(a, b, c) \
170 Do_not_use_vasprintf__use_ast_vasprintf->fail(a, b, c)
173#error "Unacceptable value for the macro ASTMM_LIBC"
181 __ast_free(a, __FILE__, __LINE__, __PRETTY_FUNCTION__)
191#define ast_malloc(len) \
192 __ast_malloc((len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
202#define ast_calloc(num, len) \
203 __ast_calloc((num), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
215#define ast_calloc_cache(num, len) \
216 __ast_calloc_cache((num), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
226#define ast_realloc(p, len) \
227 __ast_realloc((p), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
241#define ast_strdup(str) \
242 __ast_strdup((str), __FILE__, __LINE__, __PRETTY_FUNCTION__)
256#define ast_strndup(str, len) \
257 __ast_strndup((str), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
267#define ast_asprintf(ret, fmt, ...) \
268 __ast_asprintf(__FILE__, __LINE__, __PRETTY_FUNCTION__, (ret), (fmt), __VA_ARGS__)
278#define ast_vasprintf(ret, fmt, ap) \
279 __ast_vasprintf((ret), (fmt), (ap), __FILE__, __LINE__, __PRETTY_FUNCTION__)
288#define ast_alloca(size) __builtin_alloca(size)
290#if !defined(ast_strdupa) && defined(__GNUC__)
298#define ast_strdupa(s) \
301 const char *__old = (s); \
302 size_t __len = strlen(__old) + 1; \
303 char *__new = __builtin_alloca(__len); \
304 memcpy (__new, __old, __len); \
310#error "NEVER INCLUDE astmm.h DIRECTLY!!"
void * __ast_malloc(size_t size, const char *file, int lineno, const char *func) attribute_malloc
void ast_std_free(void *ptr)
void * ast_std_malloc(size_t size) attribute_malloc
void * __ast_calloc_cache(size_t nmemb, size_t size, const char *file, int lineno, const char *func) attribute_malloc
int __ast_repl_vasprintf(char **strp, const char *format, va_list ap, const char *file, int lineno, const char *func)
char * __ast_strndup(const char *s, size_t n, const char *file, int lineno, const char *func) attribute_malloc
void * ast_std_realloc(void *ptr, size_t size)
char * __ast_repl_strdup(const char *s, const char *file, int lineno, const char *func) attribute_malloc
void * __ast_repl_malloc(size_t size, const char *file, int lineno, const char *func) attribute_malloc
void * ast_std_calloc(size_t nmemb, size_t size) attribute_malloc
void * __ast_realloc(void *ptr, size_t size, const char *file, int lineno, const char *func)
char * __ast_repl_strndup(const char *s, size_t n, const char *file, int lineno, const char *func) attribute_malloc
int __ast_vasprintf(char **strp, const char *format, va_list ap, const char *file, int lineno, const char *func)
void * __ast_repl_calloc(size_t nmemb, size_t size, const char *file, int lineno, const char *func) attribute_malloc
void * __ast_repl_realloc(void *ptr, size_t size, const char *file, int lineno, const char *func)
char * __ast_strdup(const char *s, const char *file, int lineno, const char *func) attribute_malloc
int __ast_repl_asprintf(const char *file, int lineno, const char *func, char **strp, const char *format,...)
void ast_free_ptr(void *ptr)
free() wrapper
void * __ast_calloc(size_t nmemb, size_t size, const char *file, int lineno, const char *func) attribute_malloc
void __ast_free(void *ptr, const char *file, int lineno, const char *func)
int __ast_asprintf(const char *file, int lineno, const char *func, char **strp, const char *format,...)