From c102c6b21bd4f6b2702ebda7aa8ccc595f418291 Mon Sep 17 00:00:00 2001 From: jD91mZM2 Date: Fri, 5 Jan 2018 18:49:35 +0100 Subject: [PATCH] Added wif* functions --- rust-toolchain | 1 + src/call.rs | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 rust-toolchain 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..069c9e1 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 +} +/// Nonzero if STATUS indicates termination by a signal. +#[inline(always)] +pub fn wifsignaled(status: usize) -> bool { + ((status & 0x7f) + 1) >> 1 > 0 +}