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 <nicolai.haehnle@amd.com>
This commit is contained in:
parent
76a4209dc0
commit
864148d69e
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue