Fix broken build on ESP-IDF caused by #115108
This commit is contained in:
parent
481d45abec
commit
b3c95c522c
@ -6,6 +6,9 @@
|
||||
#[cfg_attr(any(target_os = "espidf", target_os = "horizon"), allow(unused))]
|
||||
mod process_common;
|
||||
|
||||
#[cfg(any(target_os = "espidf", target_os = "horizon", target_os = "vita"))]
|
||||
mod process_unsupported;
|
||||
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(target_os = "fuchsia")] {
|
||||
#[path = "process_fuchsia.rs"]
|
||||
@ -15,8 +18,9 @@
|
||||
#[path = "process_vxworks.rs"]
|
||||
mod process_inner;
|
||||
} else if #[cfg(any(target_os = "espidf", target_os = "horizon", target_os = "vita"))] {
|
||||
#[path = "process_unsupported.rs"]
|
||||
mod process_inner;
|
||||
mod process_inner {
|
||||
pub use super::process_unsupported::*;
|
||||
}
|
||||
} else {
|
||||
#[path = "process_unix.rs"]
|
||||
mod process_inner;
|
||||
|
@ -63,12 +63,12 @@ pub fn try_wait(&mut self) -> io::Result<Option<ExitStatus>> {
|
||||
|
||||
impl Into<ExitStatus> for ExitStatusError {
|
||||
fn into(self) -> ExitStatus {
|
||||
ExitStatus(self.0.into())
|
||||
ExitStatus::from(c_int::from(self.0))
|
||||
}
|
||||
}
|
||||
|
||||
impl ExitStatusError {
|
||||
pub fn code(self) -> Option<NonZeroI32> {
|
||||
ExitStatus(self.0.into()).code().map(|st| st.try_into().unwrap())
|
||||
ExitStatus::from(c_int::from(self.0)).code().map(|st| st.try_into().unwrap())
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,13 @@
|
||||
//! Emulated wait status for non-Unix #[cfg(unix) platforms
|
||||
//!
|
||||
//! Separate module to facilitate testing against a real Unix implementation.
|
||||
use core::ffi::NonZero_c_int;
|
||||
|
||||
use crate::ffi::c_int;
|
||||
use crate::fmt;
|
||||
|
||||
use super::ExitStatusError;
|
||||
|
||||
/// Emulated wait status for use by `process_unsupported.rs`
|
||||
///
|
||||
/// Uses the "traditional unix" encoding. For use on platfors which are `#[cfg(unix)]`
|
||||
@ -40,6 +43,19 @@ pub fn code(&self) -> Option<i32> {
|
||||
if (w & 0x7f) == 0 { Some((w & 0xff00) >> 8) } else { None }
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
pub fn exit_ok(&self) -> Result<(), ExitStatusError> {
|
||||
// This assumes that WIFEXITED(status) && WEXITSTATUS==0 corresponds to status==0. This is
|
||||
// true on all actual versions of Unix, is widely assumed, and is specified in SuS
|
||||
// https://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html. If it is not
|
||||
// true for a platform pretending to be Unix, the tests (our doctests, and also
|
||||
// process_unix/tests.rs) will spot it. `ExitStatusError::code` assumes this too.
|
||||
match NonZero_c_int::try_from(self.wait_status) {
|
||||
/* was nonzero */ Ok(failure) => Err(ExitStatusError(failure)),
|
||||
/* was zero, couldn't convert */ Err(_) => Ok(()),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn signal(&self) -> Option<i32> {
|
||||
let signal = self.wait_status & 0x007f;
|
||||
if signal > 0 && signal < 0x7f { Some(signal) } else { None }
|
||||
|
Loading…
Reference in New Issue
Block a user