aboutsummaryrefslogtreecommitdiff
path: root/fake-lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'fake-lib.c')
-rw-r--r--fake-lib.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/fake-lib.c b/fake-lib.c
index 9255005..2207ce3 100644
--- a/fake-lib.c
+++ b/fake-lib.c
@@ -28,6 +28,25 @@ char *ascii(const char16_t *wstr, bool translate_slashes)
28 return ret; 28 return ret;
29} 29}
30 30
31void system_argv_array(char **args)
32{
33 pid_t pid = fork();
34 if (pid < 0)
35 err(1, "fork");
36
37 if (pid == 0) {
38 execvp(args[0], args);
39 warn("execvp");
40 _exit(127);
41 }
42
43 int status;
44 if (waitpid(pid, &status, 0) != pid)
45 err(1, "waitpid");
46 if (!(WIFEXITED(status) && WEXITSTATUS(status) == 0))
47 errx(1, "subcommand failed");
48}
49
31void system_argv(const char *cmd, ...) 50void system_argv(const char *cmd, ...)
32{ 51{
33 int nargs, nchars; 52 int nargs, nchars;
@@ -54,21 +73,7 @@ void system_argv(const char *cmd, ...)
54 va_end(ap); 73 va_end(ap);
55 *argp++ = NULL; 74 *argp++ = NULL;
56 75
57 pid_t pid = fork(); 76 system_argv_array(args);
58 if (pid < 0)
59 err(1, "fork");
60
61 if (pid == 0) {
62 execvp(args[0], args);
63 warn("execvp");
64 _exit(127);
65 }
66
67 int status;
68 if (waitpid(pid, &status, 0) != pid)
69 err(1, "waitpid");
70 if (!(WIFEXITED(status) && WEXITSTATUS(status) == 0))
71 errx(1, "subcommand failed");
72} 77}
73 78
74void c16cpy(char16_t *out, uint32_t *outsize, char *s) 79void c16cpy(char16_t *out, uint32_t *outsize, char *s)
@@ -91,6 +96,14 @@ void *smalloc(size_t size)
91 return toret; 96 return toret;
92} 97}
93 98
99void *srealloc(void *ptr, size_t size)
100{
101 void *toret = realloc(ptr, size);
102 if (!toret)
103 errx(1, "out of memory");
104 return toret;
105}
106
94char *dupcat(const char *str, ...) 107char *dupcat(const char *str, ...)
95{ 108{
96 va_list ap; 109 va_list ap;