From: Brian Paul Date: Fri, 8 Sep 2017 22:41:16 +0000 (-0600) Subject: util: add util_vasprintf() for Windows (v2) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=864148d69e1ecf6e8ff07b0587627e41823f1cb4;p=mesa.git util: add util_vasprintf() for Windows (v2) We don't have vasprintf() on Windows so we need to implement it ourselves. v2: compute actual length of output string, per Nicolai Hähnle. Reviewed-by: Nicolai Hähnle --- 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