mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-26 04:43:10 +00:00
Temporary workaround for BSD WEXITSTATUS libc bug
The libc crate has a bug on BSD where WEXITSTATUS is not an 8-bit value, causing assertion failures. Any libc higher than our 0.2.155 would increase our MSRV, see libc commit 5ddbdc29f (Bump MSRV to 1.71, 2024-01-07), so we want to woraround this anyway. It's probably not worth using a patched version of libc since it's just one line. While at it, tighten some types I guess. Upstream fix: https://github.com/rust-lang/libc/pull/4213 Closes #10919
This commit is contained in:
parent
5de6f4bb3d
commit
c1b460525c
1 changed files with 4 additions and 4 deletions
|
@ -233,14 +233,14 @@ impl ProcStatus {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the exit code, given that we normal exited.
|
/// Return the exit code, given that we normal exited.
|
||||||
pub fn exit_code(&self) -> libc::c_int {
|
pub fn exit_code(&self) -> u8 {
|
||||||
assert!(self.normal_exited(), "Process is not normal exited");
|
assert!(self.normal_exited(), "Process is not normal exited");
|
||||||
WEXITSTATUS(self.status())
|
u8::try_from(WEXITSTATUS(self.status()) & 0xff).unwrap() // Workaround for libc bug
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return if this status represents success.
|
/// Return if this status represents success.
|
||||||
pub fn is_success(&self) -> bool {
|
pub fn is_success(&self) -> bool {
|
||||||
self.normal_exited() && self.exit_code() == EXIT_SUCCESS
|
self.normal_exited() && self.exit_code() == u8::try_from(EXIT_SUCCESS).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the value appropriate to populate $status.
|
/// Return the value appropriate to populate $status.
|
||||||
|
@ -248,7 +248,7 @@ impl ProcStatus {
|
||||||
if self.signal_exited() {
|
if self.signal_exited() {
|
||||||
128 + self.signal_code()
|
128 + self.signal_code()
|
||||||
} else if self.normal_exited() {
|
} else if self.normal_exited() {
|
||||||
self.exit_code()
|
i32::from(self.exit_code())
|
||||||
} else {
|
} else {
|
||||||
panic!("Process is not exited")
|
panic!("Process is not exited")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue