aboutsummaryrefslogtreecommitdiff
path: root/fake-lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'fake-lib.c')
-rw-r--r--fake-lib.c51
1 files changed, 49 insertions, 2 deletions
diff --git a/fake-lib.c b/fake-lib.c
index f8dbea4..9255005 100644
--- a/fake-lib.c
+++ b/fake-lib.c
@@ -11,7 +11,9 @@
11#include <sys/wait.h> 11#include <sys/wait.h>
12#include <unistd.h> 12#include <unistd.h>
13 13
14static char *ascii(const char16_t *wstr, bool translate_slashes) 14#include "fake-lib.h"
15
16char *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
29static void system_argv(const char *cmd, ...) 31void 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
74void 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
86void *smalloc(size_t size)
87{
88 void *toret = malloc(size);
89 if (!toret)
90 errx(1, "out of memory");
91 return toret;
92}
93
94char *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}