diff options
Diffstat (limited to 'src/sys/wait.rs')
-rw-r--r-- | src/sys/wait.rs | 61 |
1 files changed, 31 insertions, 30 deletions
diff --git a/src/sys/wait.rs b/src/sys/wait.rs index 3d9b3a50..259efb70 100644 --- a/src/sys/wait.rs +++ b/src/sys/wait.rs @@ -1,7 +1,7 @@ -use libc::{pid_t, c_int}; +use libc::{self, pid_t, c_int}; use {Errno, Result}; -use sys::signal; +use sys::signal::Signal; mod ffi { use libc::{pid_t, c_int}; @@ -15,7 +15,8 @@ mod ffi { target_os = "android")))] bitflags!( flags WaitPidFlag: c_int { - const WNOHANG = 0x00000001, + const WNOHANG = libc::WNOHANG, + const WUNTRACED = libc::WUNTRACED, } ); @@ -23,14 +24,14 @@ bitflags!( target_os = "android"))] bitflags!( flags WaitPidFlag: c_int { - const WNOHANG = 0x00000001, - const WUNTRACED = 0x00000002, - const WEXITED = 0x00000004, - const WCONTINUED = 0x00000008, - const WNOWAIT = 0x01000000, // Don't reap, just poll status. - const __WNOTHREAD = 0x20000000, // Don't wait on children of other threads in this group - const __WALL = 0x40000000, // Wait on all children, regardless of type - // const __WCLONE = 0x80000000, + const WNOHANG = libc::WNOHANG, + const WUNTRACED = libc::WUNTRACED, + const WEXITED = libc::WEXITED, + const WCONTINUED = libc::WCONTINUED, + const WNOWAIT = libc::WNOWAIT, // Don't reap, just poll status. + const __WNOTHREAD = libc::__WNOTHREAD, // Don't wait on children of other threads in this group + const __WALL = libc::__WALL, // Wait on all children, regardless of type + const __WCLONE = libc::__WCLONE, } ); @@ -41,8 +42,8 @@ const WSTOPPED: WaitPidFlag = WUNTRACED; #[derive(Eq, PartialEq, Clone, Copy, Debug)] pub enum WaitStatus { Exited(pid_t, i8), - Signaled(pid_t, signal::SigNum, bool), - Stopped(pid_t, signal::SigNum), + Signaled(pid_t, Signal, bool), + Stopped(pid_t, Signal), Continued(pid_t), StillAlive } @@ -50,7 +51,7 @@ pub enum WaitStatus { #[cfg(any(target_os = "linux", target_os = "android"))] mod status { - use sys::signal; + use sys::signal::Signal; pub fn exited(status: i32) -> bool { (status & 0x7F) == 0 @@ -64,8 +65,8 @@ mod status { ((((status & 0x7f) + 1) as i8) >> 1) > 0 } - pub fn term_signal(status: i32) -> signal::SigNum { - (status & 0x7f) as signal::SigNum + pub fn term_signal(status: i32) -> Signal { + Signal::from_c_int(status & 0x7f).unwrap() } pub fn dumped_core(status: i32) -> bool { @@ -76,8 +77,8 @@ mod status { (status & 0xff) == 0x7f } - pub fn stop_signal(status: i32) -> signal::SigNum { - ((status & 0xFF00) >> 8) as signal::SigNum + pub fn stop_signal(status: i32) -> Signal { + Signal::from_c_int((status & 0xFF00) >> 8).unwrap() } pub fn continued(status: i32) -> bool { @@ -88,7 +89,7 @@ mod status { #[cfg(any(target_os = "macos", target_os = "ios"))] mod status { - use sys::signal; + use sys::signal::{Signal,SIGCONT}; const WCOREFLAG: i32 = 0x80; const WSTOPPED: i32 = 0x7f; @@ -101,16 +102,16 @@ mod status { ((status >> 8) & 0xFF) as i8 } - pub fn stop_signal(status: i32) -> signal::SigNum { - (status >> 8) as signal::SigNum + pub fn stop_signal(status: i32) -> Signal { + Signal::from_c_int(status >> 8).unwrap() } pub fn continued(status: i32) -> bool { - wstatus(status) == WSTOPPED && stop_signal(status) == 0x13 + wstatus(status) == WSTOPPED && stop_signal(status) == SIGCONT } pub fn stopped(status: i32) -> bool { - wstatus(status) == WSTOPPED && stop_signal(status) != 0x13 + wstatus(status) == WSTOPPED && stop_signal(status) != SIGCONT } pub fn exited(status: i32) -> bool { @@ -121,8 +122,8 @@ mod status { wstatus(status) != WSTOPPED && wstatus(status) != 0 } - pub fn term_signal(status: i32) -> signal::SigNum { - wstatus(status) as signal::SigNum + pub fn term_signal(status: i32) -> Signal { + Signal::from_c_int(wstatus(status)).unwrap() } pub fn dumped_core(status: i32) -> bool { @@ -135,7 +136,7 @@ mod status { target_os = "dragonfly", target_os = "netbsd"))] mod status { - use sys::signal; + use sys::signal::Signal; const WCOREFLAG: i32 = 0x80; const WSTOPPED: i32 = 0x7f; @@ -148,16 +149,16 @@ mod status { wstatus(status) == WSTOPPED } - pub fn stop_signal(status: i32) -> signal::SigNum { - (status >> 8) as signal::SigNum + pub fn stop_signal(status: i32) -> Signal { + Signal::from_c_int(status >> 8).unwrap() } pub fn signaled(status: i32) -> bool { wstatus(status) != WSTOPPED && wstatus(status) != 0 && status != 0x13 } - pub fn term_signal(status: i32) -> signal::SigNum { - wstatus(status) as signal::SigNum + pub fn term_signal(status: i32) -> Signal { + Signal::from_c_int(wstatus(status)).unwrap() } pub fn exited(status: i32) -> bool { |