Skip to content

Commit

Permalink
Move process::ExitCode internals to sys
Browse files Browse the repository at this point in the history
Now begins the saga of fixing compilation errors on other platforms...
  • Loading branch information
scottmcm committed Mar 4, 2018
1 parent 2ce2b40 commit 74c5c6e
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 24 deletions.
29 changes: 8 additions & 21 deletions src/libstd/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1098,38 +1098,26 @@ impl fmt::Display for ExitStatus {
///
/// [RFC #1937]: https://github.com/rust-lang/rfcs/pull/1937
#[derive(Clone, Copy, Debug)]
#[unstable(feature = "process_exitcode_placeholder", issue = "43301")]
pub struct ExitCode(pub i32);
#[unstable(feature = "process_exitcode_placeholder", issue = "48711")]
pub struct ExitCode(imp::ExitCode);

#[cfg(target_arch = "wasm32")]
mod rawexit {
pub const SUCCESS: i32 = 0;
pub const FAILURE: i32 = 1;
}
#[cfg(not(target_arch = "wasm32"))]
mod rawexit {
use libc;
pub const SUCCESS: i32 = libc::EXIT_SUCCESS;
pub const FAILURE: i32 = libc::EXIT_FAILURE;
}

#[unstable(feature = "process_exitcode_placeholder", issue = "43301")]
#[unstable(feature = "process_exitcode_placeholder", issue = "48711")]
impl ExitCode {
/// The canonical ExitCode for successful termination on this platform.
///
/// Note that a `()`-returning `main` implicitly results in a successful
/// termination, so there's no need to return this from `main` unless
/// you're also returning other possible codes.
#[unstable(feature = "process_exitcode_placeholder", issue = "43301")]
pub const SUCCESS: ExitCode = ExitCode(rawexit::SUCCESS);
#[unstable(feature = "process_exitcode_placeholder", issue = "48711")]
pub const SUCCESS: ExitCode = ExitCode(imp::ExitCode::SUCCESS);

/// The canonical ExitCode for unsuccessful termination on this platform.
///
/// If you're only returning this and `SUCCESS` from `main`, consider
/// instead returning `Err(_)` and `Ok(())` respectively, which will
/// return the same codes (but will also `eprintln!` the error).
#[unstable(feature = "process_exitcode_placeholder", issue = "43301")]
pub const FAILURE: ExitCode = ExitCode(rawexit::FAILURE);
#[unstable(feature = "process_exitcode_placeholder", issue = "48711")]
pub const FAILURE: ExitCode = ExitCode(imp::ExitCode::FAILURE);
}

impl Child {
Expand Down Expand Up @@ -1494,8 +1482,7 @@ impl<E: fmt::Debug> Termination for Result<!, E> {
#[unstable(feature = "termination_trait_lib", issue = "43301")]
impl Termination for ExitCode {
fn report(self) -> i32 {
let ExitCode(code) = self;
code
self.0.as_i32()
}
}

Expand Down
12 changes: 12 additions & 0 deletions src/libstd/sys/cloudabi/shims/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,18 @@ impl fmt::Display for ExitStatus {
}
}

#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub struct ExitCode(bool);

impl ExitCode {
pub const SUCCESS: ExitCode = ExitCode(false);
pub const FAILURE: ExitCode = ExitCode(true);

pub fn as_i32(&self) -> i32 {
self.0 as i32
}
}

pub struct Process(Void);

impl Process {
Expand Down
13 changes: 13 additions & 0 deletions src/libstd/sys/redox/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ use ffi::OsStr;
use os::unix::ffi::OsStrExt;
use fmt;
use io::{self, Error, ErrorKind};
use libc::{EXIT_SUCCESS, EXIT_FAILURE};
use path::{Path, PathBuf};
use sys::fd::FileDesc;
use sys::fs::{File, OpenOptions};
Expand Down Expand Up @@ -480,6 +481,18 @@ impl fmt::Display for ExitStatus {
}
}

#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub struct ExitCode(u8);

impl ExitCode {
pub const SUCCESS: ExitCode = ExitCode(EXIT_SUCCESS as _);
pub const FAILURE: ExitCode = ExitCode(EXIT_FAILURE as _);

pub fn as_i32(&self) -> i32 {
self.0 as i32
}
}

/// The unique id of the process (this should never be negative).
pub struct Process {
pid: usize,
Expand Down
2 changes: 1 addition & 1 deletion src/libstd/sys/unix/process/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

pub use self::process_common::{Command, ExitStatus, Stdio, StdioPipes};
pub use self::process_common::{Command, ExitStatus, ExitCode, Stdio, StdioPipes};
pub use self::process_inner::Process;

mod process_common;
Expand Down
14 changes: 13 additions & 1 deletion src/libstd/sys/unix/process/process_common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use os::unix::prelude::*;
use ffi::{OsString, OsStr, CString, CStr};
use fmt;
use io;
use libc::{self, c_int, gid_t, uid_t, c_char};
use libc::{self, c_int, gid_t, uid_t, c_char, EXIT_SUCCESS, EXIT_FAILURE};
use ptr;
use sys::fd::FileDesc;
use sys::fs::{File, OpenOptions};
Expand Down Expand Up @@ -393,6 +393,18 @@ impl fmt::Display for ExitStatus {
}
}

#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub struct ExitCode(u8);

impl ExitCode {
pub const SUCCESS: ExitCode = ExitCode(EXIT_SUCCESS as _);
pub const FAILURE: ExitCode = ExitCode(EXIT_FAILURE as _);

pub fn as_i32(&self) -> i32 {
self.0 as i32
}
}

#[cfg(all(test, not(target_os = "emscripten")))]
mod tests {
use super::*;
Expand Down
12 changes: 12 additions & 0 deletions src/libstd/sys/wasm/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,18 @@ impl fmt::Display for ExitStatus {
}
}

#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub struct ExitCode(bool);

impl ExitCode {
pub const SUCCESS: ExitCode = ExitCode(false);
pub const FAILURE: ExitCode = ExitCode(true);

pub fn as_i32(&self) -> i32 {
self.0 as i32
}
}

pub struct Process(Void);

impl Process {
Expand Down
14 changes: 13 additions & 1 deletion src/libstd/sys/windows/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use ffi::{OsString, OsStr};
use fmt;
use fs;
use io::{self, Error, ErrorKind};
use libc::c_void;
use libc::{c_void, EXIT_SUCCESS, EXIT_FAILURE};
use mem;
use os::windows::ffi::OsStrExt;
use path::Path;
Expand Down Expand Up @@ -408,6 +408,18 @@ impl fmt::Display for ExitStatus {
}
}

#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub struct ExitCode(c::DWORD);

impl ExitCode {
pub const SUCCESS: ExitCode = ExitCode(EXIT_SUCCESS as _);
pub const FAILURE: ExitCode = ExitCode(EXIT_FAILURE as _);

pub fn as_i32(&self) -> i32 {
self.0 as i32
}
}

fn zeroed_startupinfo() -> c::STARTUPINFO {
c::STARTUPINFO {
cb: 0,
Expand Down

0 comments on commit 74c5c6e

Please sign in to comment.