/* * wait.c: a version of wait() for MiNT */ #include #include #include "mintbind.h" /* under TOS, vfork() puts its result in __waitval */ extern long __waitval; /* in thread.c */ int wait(status) int *status; { long r; int exit_status, sig_term, pid; extern int __mint; if (__mint == 0) { /* wait is faked by vfork() */ r = __waitval; __waitval = -ENOENT; } else r = Pwait3(0, 0L); if (r < 0) { errno = (int) -r; return -1; } pid = (int) ((r & 0xffff0000L) >> 16); exit_status = (int) (r & 0x000000ffL); sig_term = (int) ((r & 0x00007f00L) >> 8); if (status) { *status = (exit_status << 8) | sig_term; } return pid; }