diff options
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/u_string.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/util/u_string.h b/src/util/u_string.h index e88e13f42c6..48f1125ccf1 100644 --- a/src/util/u_string.h +++ b/src/util/u_string.h @@ -110,6 +110,27 @@ util_sprintf(char *str, const char *format, ...) va_end(ap); } +static inline int +util_vasprintf(char **ret, const char *format, va_list ap) +{ + va_list ap_copy; + + /* Compute length of output string first */ + va_copy(ap_copy, ap); + int r = util_vsnprintf(NULL, 0, format, ap); + va_end(ap_copy); + + if (r < 0) + return -1; + + *ret = (char *) malloc(r + 1); + if (!ret) + return -1; + + /* Print to buffer */ + return util_vsnprintf(*ret, r + 1, format, ap); +} + static inline char * util_strchr(const char *s, char c) { @@ -186,6 +207,7 @@ util_strstr(const char *haystack, const char *needle) #define util_vsnprintf vsnprintf #define util_snprintf snprintf #define util_vsprintf vsprintf +#define util_vasprintf vasprintf #define util_sprintf sprintf #define util_strchr strchr #define util_strcmp strcmp |