From 47a0b69029857e92703ca5b00022dcfcb179c9c7 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 14 Oct 2001 09:32:14 +0000 Subject: bit neater talloc_asprintf() implementation (This used to be commit 8ca8875cd94dce8827ce8cb857b2d7a959ab7891) --- source3/lib/talloc.c | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) (limited to 'source3') diff --git a/source3/lib/talloc.c b/source3/lib/talloc.c index 05f4351aaf..7bfabdd88d 100644 --- a/source3/lib/talloc.c +++ b/source3/lib/talloc.c @@ -169,30 +169,22 @@ char *talloc_strdup(TALLOC_CTX *t, char *p) /* allocate a bit of memory from the specified pool */ char *talloc_asprintf(TALLOC_CTX *t, const char *fmt, ...) { - struct talloc_chunk *tc; va_list ap; - char *str; - size_t ret; - - tc = malloc(sizeof(*tc)); - if (!tc) - return NULL; + int len; + char *ret; + /* work out how long it will be */ va_start(ap, fmt); - ret = vasprintf(&str, fmt, ap); + len = vsnprintf(NULL, 0, fmt, ap); va_end(ap); - if (ret <= 0) - { - SAFE_FREE(tc); - return NULL; - } + + ret = talloc(t, len); + if (!ret) return NULL; - tc->ptr = str; - tc->size = ret + 1; - tc->next = t->list; - t->list = tc; - t->total_alloc_size += tc->size; + va_start(ap, fmt); + vsnprintf(ret, len, fmt, ap); + va_end(ap); - return str; + return ret; } -- cgit