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