mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-26 03:35:17 +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
Cherry-picked from c1b460525c
This commit is contained in:
parent
70ba81e5b3
commit
5fed900b94
2 changed files with 5 additions and 4 deletions
|
@ -1,6 +1,7 @@
|
|||
Changes since 4.0b1
|
||||
-------------------
|
||||
- :kbd:`ctrl-c` cancels builtin ``read`` again, fixing a regression in the beta. :issue:`10928`
|
||||
- Fix a BSD-specific regression in the beta that caused crashes when a child process exited with a status like -1 (:issue:`10919`).
|
||||
- Fix a regression in the beta where ``__fish_cancel_commandline`` caused glitches on multi-line command lines (:issue:`10935`).
|
||||
- Self-installable builds can now also be installed to a specific location by giving a path to ``--install``, like::
|
||||
fish --install=$HOME/.local/
|
||||
|
|
|
@ -233,14 +233,14 @@ impl ProcStatus {
|
|||
}
|
||||
|
||||
/// 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");
|
||||
WEXITSTATUS(self.status())
|
||||
u8::try_from(WEXITSTATUS(self.status()) & 0xff).unwrap() // Workaround for libc bug
|
||||
}
|
||||
|
||||
/// Return if this status represents success.
|
||||
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.
|
||||
|
@ -248,7 +248,7 @@ impl ProcStatus {
|
|||
if self.signal_exited() {
|
||||
128 + self.signal_code()
|
||||
} else if self.normal_exited() {
|
||||
self.exit_code()
|
||||
i32::from(self.exit_code())
|
||||
} else {
|
||||
panic!("Process is not exited")
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue