Commit | Line | Data |
---|---|---|
44e8e956 BVA |
1 | #include <stdio.h> |
2 | #include <stdlib.h> | |
3 | #include "oslib/asprintf.h" | |
4 | ||
cb3b6806 | 5 | #ifndef CONFIG_HAVE_VASPRINTF |
44e8e956 BVA |
6 | int 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 |
31 | int 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 |