Move process::ExitCode internals to sys
Now begins the saga of fixing compilation errors on other platforms...
This commit is contained in:
parent
2ce2b40ee5
commit
74c5c6e6cb
7 changed files with 72 additions and 24 deletions
|
@ -1098,38 +1098,26 @@ impl fmt::Display for ExitStatus {
|
||||||
///
|
///
|
||||||
/// [RFC #1937]: https://github.com/rust-lang/rfcs/pull/1937
|
/// [RFC #1937]: https://github.com/rust-lang/rfcs/pull/1937
|
||||||
#[derive(Clone, Copy, Debug)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
#[unstable(feature = "process_exitcode_placeholder", issue = "43301")]
|
#[unstable(feature = "process_exitcode_placeholder", issue = "48711")]
|
||||||
pub struct ExitCode(pub i32);
|
pub struct ExitCode(imp::ExitCode);
|
||||||
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
#[unstable(feature = "process_exitcode_placeholder", issue = "48711")]
|
||||||
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")]
|
|
||||||
impl ExitCode {
|
impl ExitCode {
|
||||||
/// The canonical ExitCode for successful termination on this platform.
|
/// The canonical ExitCode for successful termination on this platform.
|
||||||
///
|
///
|
||||||
/// Note that a `()`-returning `main` implicitly results in a successful
|
/// Note that a `()`-returning `main` implicitly results in a successful
|
||||||
/// termination, so there's no need to return this from `main` unless
|
/// termination, so there's no need to return this from `main` unless
|
||||||
/// you're also returning other possible codes.
|
/// you're also returning other possible codes.
|
||||||
#[unstable(feature = "process_exitcode_placeholder", issue = "43301")]
|
#[unstable(feature = "process_exitcode_placeholder", issue = "48711")]
|
||||||
pub const SUCCESS: ExitCode = ExitCode(rawexit::SUCCESS);
|
pub const SUCCESS: ExitCode = ExitCode(imp::ExitCode::SUCCESS);
|
||||||
|
|
||||||
/// The canonical ExitCode for unsuccessful termination on this platform.
|
/// The canonical ExitCode for unsuccessful termination on this platform.
|
||||||
///
|
///
|
||||||
/// If you're only returning this and `SUCCESS` from `main`, consider
|
/// If you're only returning this and `SUCCESS` from `main`, consider
|
||||||
/// instead returning `Err(_)` and `Ok(())` respectively, which will
|
/// instead returning `Err(_)` and `Ok(())` respectively, which will
|
||||||
/// return the same codes (but will also `eprintln!` the error).
|
/// return the same codes (but will also `eprintln!` the error).
|
||||||
#[unstable(feature = "process_exitcode_placeholder", issue = "43301")]
|
#[unstable(feature = "process_exitcode_placeholder", issue = "48711")]
|
||||||
pub const FAILURE: ExitCode = ExitCode(rawexit::FAILURE);
|
pub const FAILURE: ExitCode = ExitCode(imp::ExitCode::FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Child {
|
impl Child {
|
||||||
|
@ -1494,8 +1482,7 @@ impl<E: fmt::Debug> Termination for Result<!, E> {
|
||||||
#[unstable(feature = "termination_trait_lib", issue = "43301")]
|
#[unstable(feature = "termination_trait_lib", issue = "43301")]
|
||||||
impl Termination for ExitCode {
|
impl Termination for ExitCode {
|
||||||
fn report(self) -> i32 {
|
fn report(self) -> i32 {
|
||||||
let ExitCode(code) = self;
|
self.0.as_i32()
|
||||||
code
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
pub struct Process(Void);
|
||||||
|
|
||||||
impl Process {
|
impl Process {
|
||||||
|
|
|
@ -13,6 +13,7 @@ use ffi::OsStr;
|
||||||
use os::unix::ffi::OsStrExt;
|
use os::unix::ffi::OsStrExt;
|
||||||
use fmt;
|
use fmt;
|
||||||
use io::{self, Error, ErrorKind};
|
use io::{self, Error, ErrorKind};
|
||||||
|
use libc::{EXIT_SUCCESS, EXIT_FAILURE};
|
||||||
use path::{Path, PathBuf};
|
use path::{Path, PathBuf};
|
||||||
use sys::fd::FileDesc;
|
use sys::fd::FileDesc;
|
||||||
use sys::fs::{File, OpenOptions};
|
use sys::fs::{File, OpenOptions};
|
||||||
|
@ -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).
|
/// The unique id of the process (this should never be negative).
|
||||||
pub struct Process {
|
pub struct Process {
|
||||||
pid: usize,
|
pid: usize,
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// 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;
|
pub use self::process_inner::Process;
|
||||||
|
|
||||||
mod process_common;
|
mod process_common;
|
||||||
|
|
|
@ -13,7 +13,7 @@ use os::unix::prelude::*;
|
||||||
use ffi::{OsString, OsStr, CString, CStr};
|
use ffi::{OsString, OsStr, CString, CStr};
|
||||||
use fmt;
|
use fmt;
|
||||||
use io;
|
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 ptr;
|
||||||
use sys::fd::FileDesc;
|
use sys::fd::FileDesc;
|
||||||
use sys::fs::{File, OpenOptions};
|
use sys::fs::{File, OpenOptions};
|
||||||
|
@ -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")))]
|
#[cfg(all(test, not(target_os = "emscripten")))]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
|
@ -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);
|
pub struct Process(Void);
|
||||||
|
|
||||||
impl Process {
|
impl Process {
|
||||||
|
|
|
@ -18,7 +18,7 @@ use ffi::{OsString, OsStr};
|
||||||
use fmt;
|
use fmt;
|
||||||
use fs;
|
use fs;
|
||||||
use io::{self, Error, ErrorKind};
|
use io::{self, Error, ErrorKind};
|
||||||
use libc::c_void;
|
use libc::{c_void, EXIT_SUCCESS, EXIT_FAILURE};
|
||||||
use mem;
|
use mem;
|
||||||
use os::windows::ffi::OsStrExt;
|
use os::windows::ffi::OsStrExt;
|
||||||
use path::Path;
|
use path::Path;
|
||||||
|
@ -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 {
|
fn zeroed_startupinfo() -> c::STARTUPINFO {
|
||||||
c::STARTUPINFO {
|
c::STARTUPINFO {
|
||||||
cb: 0,
|
cb: 0,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue