diff options
Diffstat (limited to 'fake-lib.c')
-rw-r--r-- | fake-lib.c | 51 |
1 files changed, 49 insertions, 2 deletions
@@ -11,7 +11,9 @@ | |||
11 | #include <sys/wait.h> | 11 | #include <sys/wait.h> |
12 | #include <unistd.h> | 12 | #include <unistd.h> |
13 | 13 | ||
14 | static char *ascii(const char16_t *wstr, bool translate_slashes) | 14 | #include "fake-lib.h" |
15 | |||
16 | char *ascii(const char16_t *wstr, bool translate_slashes) | ||
15 | { | 17 | { |
16 | size_t len = 0; | 18 | size_t len = 0; |
17 | for (const char16_t *wp = wstr; *wp; wp++) | 19 | for (const char16_t *wp = wstr; *wp; wp++) |
@@ -26,7 +28,7 @@ static char *ascii(const char16_t *wstr, bool translate_slashes) | |||
26 | return ret; | 28 | return ret; |
27 | } | 29 | } |
28 | 30 | ||
29 | static void system_argv(const char *cmd, ...) | 31 | void system_argv(const char *cmd, ...) |
30 | { | 32 | { |
31 | int nargs, nchars; | 33 | int nargs, nchars; |
32 | const char *word; | 34 | const char *word; |
@@ -68,3 +70,48 @@ static void system_argv(const char *cmd, ...) | |||
68 | if (!(WIFEXITED(status) && WEXITSTATUS(status) == 0)) | 70 | if (!(WIFEXITED(status) && WEXITSTATUS(status) == 0)) |
69 | errx(1, "subcommand failed"); | 71 | errx(1, "subcommand failed"); |
70 | } | 72 | } |
73 | |||
74 | void c16cpy(char16_t *out, uint32_t *outsize, char *s) | ||
75 | { | ||
76 | uint32_t retlen = 0; | ||
77 | while (retlen < *outsize) { | ||
78 | char16_t c = (out[retlen] = (unsigned char)*s++); | ||
79 | if (!c) | ||
80 | break; | ||
81 | retlen++; | ||
82 | } | ||
83 | *outsize = retlen; | ||
84 | } | ||
85 | |||
86 | void *smalloc(size_t size) | ||
87 | { | ||
88 | void *toret = malloc(size); | ||
89 | if (!toret) | ||
90 | errx(1, "out of memory"); | ||
91 | return toret; | ||
92 | } | ||
93 | |||
94 | char *dupcat(const char *str, ...) | ||
95 | { | ||
96 | va_list ap; | ||
97 | const char *p; | ||
98 | char *out, *outp; | ||
99 | size_t len; | ||
100 | |||
101 | len = 1; | ||
102 | va_start(ap, str); | ||
103 | for (p = str; p; p = va_arg(ap, const char *)) | ||
104 | len += strlen(p); | ||
105 | va_end(ap); | ||
106 | |||
107 | out = snewn(len, char); | ||
108 | outp = out; | ||
109 | va_start(ap, str); | ||
110 | for (p = str; p; p = va_arg(ap, const char *)) { | ||
111 | strcpy(outp, p); | ||
112 | outp += strlen(p); | ||
113 | } | ||
114 | va_end(ap); | ||
115 | |||
116 | return out; | ||
117 | } | ||