add a vasprintf replacement. Bug #839

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2030 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Jeremy McNamara
2004-01-14 06:35:01 +00:00
parent b3ab1cbe73
commit cf41cc2ec2
2 changed files with 26 additions and 0 deletions

20
astmm.c
View File

@@ -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;
@@ -217,6 +219,24 @@ char *__ast_strndup(const char *s, size_t n, const char *file, int lineno, const
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;