Index: astmm.c =================================================================== RCS file: /usr/cvsroot/asterisk/astmm.c,v retrieving revision 1.7 diff -u -r1.7 astmm.c --- astmm.c 11 Jan 2004 22:36:37 -0000 1.7 +++ astmm.c 14 Jan 2004 05:01:41 -0000 @@ -32,6 +32,7 @@ #define FUNC_REALLOC 3 #define FUNC_STRDUP 4 #define FUNC_STRNDUP 5 +#define FUNC_VASPRINTF 6 /* Undefine all our macros */ #undef malloc @@ -40,6 +41,7 @@ #undef strdup #undef strndup #undef free +#undef vasprintf static FILE *mmlog; @@ -215,6 +217,24 @@ if (ptr) strcpy(ptr, s); 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[]) Index: include/asterisk/astmm.h =================================================================== RCS file: /usr/cvsroot/asterisk/include/asterisk/astmm.h,v retrieving revision 1.1 diff -u -r1.1 astmm.h --- include/asterisk/astmm.h 28 Apr 2003 19:58:43 -0000 1.1 +++ include/asterisk/astmm.h 14 Jan 2004 05:01:41 -0000 @@ -21,6 +21,7 @@ #include #include #include +#include /* Undefine any macros */ #undef malloc @@ -28,6 +29,7 @@ #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); @@ -35,6 +37,7 @@ 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); @@ -57,6 +60,9 @@ #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!!"