summaryrefslogtreecommitdiff
path: root/src/shared.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared.c')
-rw-r--r--src/shared.c41
1 files changed, 1 insertions, 40 deletions
diff --git a/src/shared.c b/src/shared.c
index 250b348..b154391 100644
--- a/src/shared.c
+++ b/src/shared.c
@@ -33,43 +33,4 @@ void* xreallocarray(void *ptr, size_t nmemb, size_t size) {
33 } 33 }
34 34
35 return mem; 35 return mem;
36} 36} \ No newline at end of file
37
38#if !defined _GNU_SOURCE
39
40int vasprintf(char **str, const char *format, va_list ap) {
41 va_list ap2;
42 int length, ret;
43
44 va_copy(ap2, ap);
45 if((length = vsnprintf(NULL, 0, format, ap2)) < 0)
46 return -1;
47 length++; // + 1 because sprintf does not count the null byte
48 va_end(ap2);
49
50 char *temp = reallocarray(*str, length, sizeof(char));
51 if(temp == NULL)
52 return -1;
53
54 if((ret = vsnprintf(temp, length, format, ap)) < 0) {
55 free(temp);
56 return -1;
57 } else {
58 *str = temp;
59 }
60
61 return ret;
62}
63
64int asprintf(char **str, const char *format, ...) {
65 va_list ap;
66 int ret;
67
68 va_start(ap, format);
69 ret = vasprintf(str, format, ap);
70 va_end(ap);
71
72 return ret;
73}
74
75#endif \ No newline at end of file