From c1b460525c6fc4a720cd40c5b214d0e92bbe047b Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Thu, 19 Dec 2024 07:57:03 +0100 Subject: [PATCH] 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 --- src/proc.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/proc.rs b/src/proc.rs index cc8012183..7537458fa 100644 --- a/src/proc.rs +++ b/src/proc.rs @@ -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") }