uapi 0.2.8

Wrappers for OS APIs on UNIX-like platform
Documentation
use std::process::exit;
use testutils::*;
use uapi::*;

#[test]
fn process5() {
    match unsafe { fork().unwrap() } {
        0 => in_fork(|| {
            raise(c::SIGSTOP).unwrap();
            exit(1);
        }),
        n => {
            let (pid, status) = waitpid(n, c::WUNTRACED).unwrap();
            assert_eq!(pid, n);
            assert_eq!(WIFEXITED(status), false);
            assert_eq!(WIFSIGNALED(status), false);
            assert_eq!(WIFSTOPPED(status), true);
            assert_eq!(WIFCONTINUED(status), false);
            assert_eq!(WSTOPSIG(status), c::SIGSTOP);

            kill(n, c::SIGCONT).unwrap();

            let (pid, status) = waitpid(n, c::WCONTINUED).unwrap();
            assert_eq!(pid, n);
            assert_eq!(WIFEXITED(status), false);
            // https://github.com/rust-lang/libc/issues/1782
            #[cfg(not(target_os = "freebsd"))]
            assert_eq!(WIFSIGNALED(status), false);
            // https://github.com/rust-lang/libc/issues/1784
            #[cfg(not(target_os = "openbsd"))]
            assert_eq!(WIFSTOPPED(status), false);
            assert_eq!(WIFCONTINUED(status), true);

            let (pid, status) = waitpid(n, 0).unwrap();
            assert_eq!(pid, n);
            assert_eq!(WIFEXITED(status), true);
            // https://github.com/rust-lang/libc/issues/1782
            #[cfg(not(target_os = "freebsd"))]
            assert_eq!(WIFSIGNALED(status), false);
            // https://github.com/rust-lang/libc/issues/1784
            #[cfg(not(target_os = "openbsd"))]
            assert_eq!(WIFSTOPPED(status), false);
            assert_eq!(WIFCONTINUED(status), false);
            assert_eq!(WEXITSTATUS(status), 1);
        }
    }
}