Auto merge of #85490 - CDirkx:fix-vxworks, r=dtolnay
Fix `vxworks` Some PRs made the `vxworks` target not build anymore. This PR fixes that: - #82973: copy `ExitStatusError` implementation from `unix`. - #84716: no `libc::chroot` available on `vxworks`, so for now don't implement `os::unix::fs::chroot`.
This commit is contained in:
commit
6e92fb4098
4 changed files with 31 additions and 5 deletions
|
@ -906,7 +906,7 @@ impl DirBuilderExt for fs::DirBuilder {
|
|||
/// }
|
||||
/// ```
|
||||
#[unstable(feature = "unix_chroot", issue = "84715")]
|
||||
#[cfg(not(target_os = "fuchsia"))]
|
||||
#[cfg(not(any(target_os = "fuchsia", target_os = "vxworks")))]
|
||||
pub fn chroot<P: AsRef<Path>>(dir: P) -> io::Result<()> {
|
||||
sys::fs::chroot(dir.as_ref())
|
||||
}
|
||||
|
|
|
@ -1329,7 +1329,7 @@ pub fn copy(from: &Path, to: &Path) -> io::Result<u64> {
|
|||
Ok(bytes_copied as u64)
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "fuchsia"))]
|
||||
#[cfg(not(any(target_os = "fuchsia", target_os = "vxworks")))]
|
||||
pub fn chroot(dir: &Path) -> io::Result<()> {
|
||||
let dir = cstr(dir)?;
|
||||
cvt(unsafe { libc::chroot(dir.as_ptr()) })?;
|
||||
|
|
|
@ -495,7 +495,7 @@ impl ExitStatus {
|
|||
|
||||
pub fn exit_ok(&self) -> Result<(), ExitStatusError> {
|
||||
// This assumes that WIFEXITED(status) && WEXITSTATUS==0 corresponds to status==0. This is
|
||||
// true on all actual versios of Unix, is widely assumed, and is specified in SuS
|
||||
// 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
|
||||
// procsss_unix/tests.rs) will spot it. `ExitStatusError::code` assumes this too.
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
use crate::convert::{TryFrom, TryInto};
|
||||
use crate::fmt;
|
||||
use crate::io::{self, Error, ErrorKind};
|
||||
use crate::num::NonZeroI32;
|
||||
use crate::os::raw::NonZero_c_int;
|
||||
use crate::sys;
|
||||
use crate::sys::cvt;
|
||||
use crate::sys::process::process_common::*;
|
||||
|
@ -187,8 +190,16 @@ impl ExitStatus {
|
|||
libc::WIFEXITED(self.0)
|
||||
}
|
||||
|
||||
pub fn success(&self) -> bool {
|
||||
self.code() == Some(0)
|
||||
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
|
||||
// procsss_unix/tests.rs) will spot it. `ExitStatusError::code` assumes this too.
|
||||
match NonZero_c_int::try_from(self.0) {
|
||||
Ok(failure) => Err(ExitStatusError(failure)),
|
||||
Err(_) => Ok(()),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn code(&self) -> Option<i32> {
|
||||
|
@ -235,3 +246,18 @@ impl fmt::Display for ExitStatus {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
|
||||
pub struct ExitStatusError(NonZero_c_int);
|
||||
|
||||
impl Into<ExitStatus> for ExitStatusError {
|
||||
fn into(self) -> ExitStatus {
|
||||
ExitStatus(self.0.into())
|
||||
}
|
||||
}
|
||||
|
||||
impl ExitStatusError {
|
||||
pub fn code(self) -> Option<NonZeroI32> {
|
||||
ExitStatus(self.0.into()).code().map(|st| st.try_into().unwrap())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue