aboutsummaryrefslogtreecommitdiffstats
path: root/astmm.c
diff options
context:
space:
mode:
authorjeremy <jeremy@f38db490-d61c-443f-a65b-d21fe96a405b>2004-01-14 06:35:01 +0000
committerjeremy <jeremy@f38db490-d61c-443f-a65b-d21fe96a405b>2004-01-14 06:35:01 +0000
commit83b6878794a51a1694157171d2ceac2c3386c5b6 (patch)
treebe59a9a808f8f08a11acfdd5435be61ca1ebea72 /astmm.c
parente42e59d30fee9b39ff3f6b5fae75c5d88b19ae1b (diff)
add a vasprintf replacement. Bug #839
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2030 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'astmm.c')
-rwxr-xr-xastmm.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/astmm.c b/astmm.c
index 4d6d3023f..6e507aaac 100755
--- a/astmm.c
+++ b/astmm.c
@@ -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;