From 7b453b655562cbf2eb6743c2d0fd85cca68700d3 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 10 Aug 2006 11:33:42 +0000 Subject: r17477: Add talloc_asprintf_len and make use of it. Volker (This used to be commit c0ff2afe0683095401fa7b7654aa3b2fe950f7b3) --- source3/lib/talloc.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'source3/lib/talloc.c') diff --git a/source3/lib/talloc.c b/source3/lib/talloc.c index 0e223e8bbe..35c4ddaf31 100644 --- a/source3/lib/talloc.c +++ b/source3/lib/talloc.c @@ -1136,6 +1136,46 @@ char *talloc_asprintf(const void *t, const char *fmt, ...) return ret; } +int talloc_vasprintf_len(const void *t, char **res, const char *fmt, + va_list ap) +{ + int len; + va_list ap2; + char c; + + VA_COPY(ap2, ap); + + /* this call looks strange, but it makes it work on older solaris boxes */ + if ((len = vsnprintf(&c, 1, fmt, ap2)) < 0) { + return len; + } + + *res = (char *)_talloc(t, len+1); + if (*res) { + VA_COPY(ap2, ap); + vsnprintf(*res, len+1, fmt, ap2); + talloc_set_name_const(*res, *res); + } + + return len; +} + + +/* + Perform string formatting, and return a pointer to newly allocated + memory holding the result, inside a memory pool. + */ +int talloc_asprintf_len(const void *t, char **res, const char *fmt, ...) +{ + va_list ap; + int len; + + va_start(ap, fmt); + len = talloc_vasprintf_len(t, res, fmt, ap); + va_end(ap); + return len; +} + /** * Realloc @p s to append the formatted result of @p fmt and @p ap, -- cgit