summaryrefslogtreecommitdiff
path: root/system/include/libc/sys/wait.h
diff options
context:
space:
mode:
Diffstat (limited to 'system/include/libc/sys/wait.h')
-rw-r--r--system/include/libc/sys/wait.h67
1 files changed, 41 insertions, 26 deletions
diff --git a/system/include/libc/sys/wait.h b/system/include/libc/sys/wait.h
index 0e4a3394..a7ad7cd1 100644
--- a/system/include/libc/sys/wait.h
+++ b/system/include/libc/sys/wait.h
@@ -1,40 +1,55 @@
-#ifndef _SYS_WAIT_H
-#define _SYS_WAIT_H
-
+#ifndef _SYS_WAIT_H
+#define _SYS_WAIT_H
#ifdef __cplusplus
extern "C" {
#endif
-#include <sys/types.h>
+#include <features.h>
-#define WNOHANG 1
-#define WUNTRACED 2
+#include <signal.h>
-/* A status looks like:
- <2 bytes info> <2 bytes code>
+#define __NEED_pid_t
+#define __NEED_id_t
+#include <bits/alltypes.h>
- <code> == 0, child has exited, info is the exit value
- <code> == 1..7e, child has exited, info is the signal number.
- <code> == 7f, child has stopped, info was the signal number.
- <code> == 80, there was a core dump.
-*/
-
-#define WIFEXITED(w) (((w) & 0xff) == 0)
-#define WIFSIGNALED(w) (((w) & 0x7f) > 0 && (((w) & 0x7f) < 0x7f))
-#define WIFSTOPPED(w) (((w) & 0xff) == 0x7f)
-#define WEXITSTATUS(w) (((w) >> 8) & 0xff)
-#define WTERMSIG(w) ((w) & 0x7f)
-#define WSTOPSIG WEXITSTATUS
+typedef enum {
+ P_ALL = 0,
+ P_PID = 1,
+ P_PGID = 2
+} idtype_t;
pid_t wait (int *);
-pid_t waitpid (pid_t, int *, int);
+int waitid (idtype_t, id_t, siginfo_t *, int);
+pid_t waitpid (pid_t, int *, int );
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#include <sys/resource.h>
+pid_t wait3 (int *, int, struct rusage *);
+pid_t wait4 (pid_t, int *, int, struct rusage *);
+#endif
+
+#define WNOHANG 1
+#define WUNTRACED 2
-/* Provide prototypes for most of the _<systemcall> names that are
- provided in newlib for some compilers. */
-pid_t _wait (int *);
+#define WSTOPPED 2
+#define WEXITED 4
+#define WCONTINUED 8
+#define WNOWAIT 0x1000000
+
+#define __WNOTHREAD 0x20000000
+#define __WALL 0x40000000
+#define __WCLONE 0x80000000
+
+#define WEXITSTATUS(s) (((s) & 0xff00) >> 8)
+#define WTERMSIG(s) ((s) & 0x7f)
+#define WSTOPSIG(s) WEXITSTATUS(s)
+#define WCOREDUMP(s) ((s) & 0x80)
+#define WIFEXITED(s) (!WTERMSIG(s))
+#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001)>>8) > 0x7f00)
+#define WIFSIGNALED(s) (((s)&0xffff)-1 < 0xffu)
+#define WIFCONTINUED(s) ((s) == 0xffff)
#ifdef __cplusplus
-};
+}
#endif
-
#endif