#define FUNC_REALLOC 3
#define FUNC_STRDUP 4
#define FUNC_STRNDUP 5
+#define FUNC_VASPRINTF 6
/* Undefine all our macros */
#undef malloc
#undef strdup
#undef strndup
#undef free
+#undef vasprintf
static FILE *mmlog;
return ptr;
}
+int __ast_vasprintf(char **strp, const char *fmt, va_list ap, const char *file, int lineno, const char *func)
+{
+ int n, size = strlen(fmt) + 1;
+ if ((*strp = __ast_alloc_region(size, FUNC_VASPRINTF, file, lineno, func)) == NULL)
+ return -1;
+ for (;;) {
+ n = vsnprintf(*strp, size, fmt, ap);
+ if (n > -1 && n < size)
+ return n;
+ if (n > -1) /* glibc 2.1 */
+ size = n+1;
+ else /* glibc 2.0 */
+ size *= 2;
+ if ((*strp = __ast_realloc(*strp, size, file, lineno, func)) == NULL)
+ return -1;
+ }
+}
+
static int handle_show_memory(int fd, int argc, char *argv[])
{
char *fn = NULL;
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
+#include <stdio.h>
/* Undefine any macros */
#undef malloc
#undef realloc
#undef strdup
#undef strndup
+#undef vasprintf
void *__ast_calloc(size_t nmemb, size_t size, const char *file, int lineno, const char *func);
void *__ast_malloc(size_t size, const char *file, int lineno, const char *func);
void *__ast_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);
char *__ast_strndup(const char *s, size_t n, const char *file, int lineno, const char *func);
+int __ast_vasprintf(char **strp, const char *format, va_list ap, const char *file, int lineno, const char *func);
void __ast_mm_init(void);
#define strndup(a,b) \
__ast_strndup(a,b,__FILE__, __LINE__, __PRETTY_FUNCTION__)
+#define vasprintf(a,b,c) \
+ __ast_vasprintf(a,b,c,__FILE__, __LINE__, __PRETTY_FUNCTION__)
+
#else
#error "NEVER INCLUDE astmm.h DIRECTLY!!"
#endif