mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-05 11:48:30 +00:00
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
@ -906,7 +906,7 @@ impl DirBuilderExt for fs::DirBuilder {
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
#[unstable(feature = "unix_chroot", issue = "84715")]
|
#[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<()> {
|
pub fn chroot<P: AsRef<Path>>(dir: P) -> io::Result<()> {
|
||||||
sys::fs::chroot(dir.as_ref())
|
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)
|
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<()> {
|
pub fn chroot(dir: &Path) -> io::Result<()> {
|
||||||
let dir = cstr(dir)?;
|
let dir = cstr(dir)?;
|
||||||
cvt(unsafe { libc::chroot(dir.as_ptr()) })?;
|
cvt(unsafe { libc::chroot(dir.as_ptr()) })?;
|
||||||
|
@ -495,7 +495,7 @@ impl ExitStatus {
|
|||||||
|
|
||||||
pub fn exit_ok(&self) -> Result<(), ExitStatusError> {
|
pub fn exit_ok(&self) -> Result<(), ExitStatusError> {
|
||||||
// This assumes that WIFEXITED(status) && WEXITSTATUS==0 corresponds to status==0. This is
|
// 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
|
// 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
|
// 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.
|
// 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::fmt;
|
||||||
use crate::io::{self, Error, ErrorKind};
|
use crate::io::{self, Error, ErrorKind};
|
||||||
|
use crate::num::NonZeroI32;
|
||||||
|
use crate::os::raw::NonZero_c_int;
|
||||||
use crate::sys;
|
use crate::sys;
|
||||||
use crate::sys::cvt;
|
use crate::sys::cvt;
|
||||||
use crate::sys::process::process_common::*;
|
use crate::sys::process::process_common::*;
|
||||||
@ -187,8 +190,16 @@ impl ExitStatus {
|
|||||||
libc::WIFEXITED(self.0)
|
libc::WIFEXITED(self.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn success(&self) -> bool {
|
pub fn exit_ok(&self) -> Result<(), ExitStatusError> {
|
||||||
self.code() == Some(0)
|
// 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> {
|
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…
Reference in New Issue
Block a user