fio: ioengine flag cleanup
[fio.git] / oslib / asprintf.c
CommitLineData
44e8e956
BVA
1#include <stdio.h>
2#include <stdlib.h>
3#include "oslib/asprintf.h"
4
cb3b6806 5#ifndef CONFIG_HAVE_VASPRINTF
44e8e956
BVA
6int vasprintf(char **strp, const char *fmt, va_list ap)
7{
922e390f
JA
8 va_list ap_copy;
9 char *str;
10 int len;
44e8e956
BVA
11
12#ifdef va_copy
922e390f 13 va_copy(ap_copy, ap);
44e8e956 14#else
922e390f 15 __va_copy(ap_copy, ap);
44e8e956 16#endif
922e390f
JA
17 len = vsnprintf(NULL, 0, fmt, ap_copy);
18 va_end(ap_copy);
44e8e956 19
922e390f
JA
20 if (len < 0)
21 return len;
44e8e956 22
922e390f
JA
23 len++;
24 str = malloc(len);
25 *strp = str;
26 return str ? vsnprintf(str, len, fmt, ap) : -1;
44e8e956
BVA
27}
28#endif
29
cb3b6806 30#ifndef CONFIG_HAVE_ASPRINTF
44e8e956
BVA
31int asprintf(char **strp, const char *fmt, ...)
32{
922e390f
JA
33 va_list arg;
34 int done;
44e8e956 35
922e390f
JA
36 va_start(arg, fmt);
37 done = vasprintf(strp, fmt, arg);
38 va_end(arg);
44e8e956 39
922e390f 40 return done;
44e8e956
BVA
41}
42#endif