// run-pass
// On Windows the GetExitCodeProcess API is used to get the exit code of a
// process, but it's easy to mistake a process exiting with the code 259 as
// "still running" because this is the value of the STILL_ACTIVE constant. Make
// sure we handle this case in the standard library and correctly report the
// status.
//
// Note that this is disabled on unix as processes exiting with 259 will have
// their exit status truncated to 3 (only the lower 8 bits are used).

#[cfg(windows)]
fn main() {
    use std::process::{self, Command};
    use std::env;

    if env::args().len() == 1 {
        let status = Command::new(env::current_exe().unwrap())
                             .arg("foo")
                             .status()
                             .unwrap();
        assert_eq!(status.code(), Some(259));
    } else {
        process::exit(259);
    }
}

#[cfg(not(windows))]
fn main() {}
