diff --git a/rust-toolchain b/rust-toolchain new file mode 100644 index 0000000..bf867e0 --- /dev/null +++ b/rust-toolchain @@ -0,0 +1 @@ +nightly diff --git a/src/call.rs b/src/call.rs index 8c19f0b..b3e7c45 100644 --- a/src/call.rs +++ b/src/call.rs @@ -349,3 +349,29 @@ pub fn write(fd: usize, buf: &[u8]) -> Result { pub fn sched_yield() -> Result { unsafe { syscall0(SYS_YIELD) } } + +/// If wifsignaled(status), the terminating signal. +#[inline(always)] +pub fn wtermsig(status: usize) -> usize { + status & 0x7f +} +/// True if status indicates normal termination. +#[inline(always)] +pub fn wifexited(status: usize) -> bool { + wtermsig(status) == 0 +} +/// True if status indicates the child is stopped. +#[inline(always)] +pub fn wifstopped(status: usize) -> bool { + (status & 0xff) == 0x7f +} +/// True if status indicates the child continued after a stop. +#[inline(always)] +pub fn wifcontinued(status: usize) -> bool { + status == 0xffff +} +/// True if STATUS indicates termination by a signal. +#[inline(always)] +pub fn wifsignaled(status: usize) -> bool { + ((status & 0x7f) + 1) as i8 >= 2 +}