From c102c6b21bd4f6b2702ebda7aa8ccc595f418291 Mon Sep 17 00:00:00 2001 From: jD91mZM2 Date: Fri, 5 Jan 2018 18:49:35 +0100 Subject: [PATCH 1/3] 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 +} From d02a39378191a9bf0ff97b81843c51c489daf885 Mon Sep 17 00:00:00 2001 From: jD91mZM2 Date: Fri, 5 Jan 2018 18:51:37 +0100 Subject: [PATCH 2/3] Whoops, fix documentation --- src/call.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/call.rs b/src/call.rs index 069c9e1..05832f8 100644 --- a/src/call.rs +++ b/src/call.rs @@ -370,7 +370,7 @@ pub fn wifstopped(status: usize) -> bool { pub fn wifcontinued(status: usize) -> bool { status == 0xffff } -/// Nonzero if STATUS indicates termination by a signal. +/// True if STATUS indicates termination by a signal. #[inline(always)] pub fn wifsignaled(status: usize) -> bool { ((status & 0x7f) + 1) >> 1 > 0 From e145ba3ea9f63f63a9733eafca9d305c127f93dc Mon Sep 17 00:00:00 2001 From: jD91mZM2 Date: Fri, 5 Jan 2018 19:30:08 +0100 Subject: [PATCH 3/3] For some reason casting to signed byte Also, optimization! `>> 1 > 0` could be turned into `>= 2`. Thanks, rust libc --- src/call.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/call.rs b/src/call.rs index 05832f8..b3e7c45 100644 --- a/src/call.rs +++ b/src/call.rs @@ -373,5 +373,5 @@ pub fn wifcontinued(status: usize) -> bool { /// True if STATUS indicates termination by a signal. #[inline(always)] pub fn wifsignaled(status: usize) -> bool { - ((status & 0x7f) + 1) >> 1 > 0 + ((status & 0x7f) + 1) as i8 >= 2 }