mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
Rollup merge of #33224 - alexcrichton:create-exit-status, r=aturon
std: Allow creating ExitStatus from raw values Sometimes a process may be waited on externally from the standard library, in which case it can be useful to create a raw `ExitStatus` structure to return. This commit extends the existing Unix `ExitStatusExt` extension trait and adds a new Windows-specific `ExitStatusExt` extension trait to do this. The methods are currently called `ExitStatus::from_raw`. cc #32713
This commit is contained in:
commit
d394aa064e
@ -605,6 +605,12 @@ impl AsInner<imp::ExitStatus> for ExitStatus {
|
||||
fn as_inner(&self) -> &imp::ExitStatus { &self.0 }
|
||||
}
|
||||
|
||||
impl FromInner<imp::ExitStatus> for ExitStatus {
|
||||
fn from_inner(s: imp::ExitStatus) -> ExitStatus {
|
||||
ExitStatus(s)
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "process", since = "1.0.0")]
|
||||
impl fmt::Display for ExitStatus {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
|
@ -132,6 +132,11 @@ impl CommandExt for process::Command {
|
||||
/// Unix-specific extensions to `std::process::ExitStatus`
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub trait ExitStatusExt {
|
||||
/// Creates a new `ExitStatus` from the raw underlying `i32` return value of
|
||||
/// a process.
|
||||
#[unstable(feature = "exit_status_from", issue = "32713")]
|
||||
fn from_raw(raw: i32) -> Self;
|
||||
|
||||
/// If the process was terminated by a signal, returns that signal.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
fn signal(&self) -> Option<i32>;
|
||||
@ -139,6 +144,10 @@ pub trait ExitStatusExt {
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl ExitStatusExt for process::ExitStatus {
|
||||
fn from_raw(raw: i32) -> Self {
|
||||
process::ExitStatus::from_inner(From::from(raw))
|
||||
}
|
||||
|
||||
fn signal(&self) -> Option<i32> {
|
||||
self.as_inner().signal()
|
||||
}
|
||||
|
@ -550,6 +550,12 @@ impl ExitStatus {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<c_int> for ExitStatus {
|
||||
fn from(a: c_int) -> ExitStatus {
|
||||
ExitStatus(a)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for ExitStatus {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
if let Some(code) = self.code() {
|
||||
|
@ -81,3 +81,18 @@ impl IntoRawHandle for process::ChildStderr {
|
||||
self.into_inner().into_handle().into_raw() as *mut _
|
||||
}
|
||||
}
|
||||
|
||||
/// Windows-specific extensions to `std::process::ExitStatus`
|
||||
#[unstable(feature = "exit_status_from", issue = "32713")]
|
||||
pub trait ExitStatusExt {
|
||||
/// Creates a new `ExitStatus` from the raw underlying `u32` return value of
|
||||
/// a process.
|
||||
fn from_raw(raw: u32) -> Self;
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl ExitStatusExt for process::ExitStatus {
|
||||
fn from_raw(raw: u32) -> Self {
|
||||
process::ExitStatus::from_inner(From::from(raw))
|
||||
}
|
||||
}
|
||||
|
@ -337,6 +337,12 @@ impl ExitStatus {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<c::DWORD> for ExitStatus {
|
||||
fn from(u: c::DWORD) -> ExitStatus {
|
||||
ExitStatus(u)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for ExitStatus {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "exit code: {}", self.0)
|
||||
|
Loading…
Reference in New Issue
Block a user