summaryrefslogtreecommitdiff
path: root/src/user/lib/syswait.c
diff options
context:
space:
mode:
authordzwdz2023-06-11 19:17:39 +0200
committerdzwdz2023-06-11 19:17:39 +0200
commit84fa0102c6906252999967925f32098ab6d5a259 (patch)
tree00bd8c98a68e4882e2f42510c9c55932ef855ba3 /src/user/lib/syswait.c
parentff154205e1671e11ed8566740c1cefaad79c2512 (diff)
kernel: replace await with wait2, roughly compatible with POSIX
dash works now :^)))
Diffstat (limited to 'src/user/lib/syswait.c')
-rw-r--r--src/user/lib/syswait.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/user/lib/syswait.c b/src/user/lib/syswait.c
index 6389cb2..ce80c7b 100644
--- a/src/user/lib/syswait.c
+++ b/src/user/lib/syswait.c
@@ -1,8 +1,22 @@
#include <bits/panic.h>
+#include <camellia.h>
+#include <camellia/syscalls.h>
+#include <errno.h>
#include <sys/resource.h>
#include <sys/wait.h>
pid_t wait3(int *wstatus, int opts, struct rusage *rusage) {
- (void)wstatus; (void)opts; (void)rusage;
- __libc_panic("unimplemented");
+ struct sys_wait2 res;
+ if (opts || rusage) {
+ __libc_panic("unimplemented");
+ }
+ pid_t ret = _sys_wait2(-1, 0, &res);
+ if (ret < 0) {
+ errno = -ret;
+ return -1;
+ }
+ if (wstatus) {
+ *wstatus = res.status & 0xFF;
+ }
+ return ret;
}