From 06de374ffd1dabdb04d58dd5d7df5cc10ea6fc97 Mon Sep 17 00:00:00 2001 From: Fabian Boehm Date: Fri, 5 Jan 2024 16:52:18 +0100 Subject: [PATCH] Log original exit code used when a builtin returns a negative exit code Port of b91723dab6888d25f6b959859289f2aed719992c --- fish-rust/src/builtins/shared.rs | 8 ++++---- tests/checks/status-value.fish | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/fish-rust/src/builtins/shared.rs b/fish-rust/src/builtins/shared.rs index 9b73c00f3..a8ee1ae83 100644 --- a/fish-rust/src/builtins/shared.rs +++ b/fish-rust/src/builtins/shared.rs @@ -456,16 +456,16 @@ pub fn builtin_run(parser: &Parser, argv: &mut [&wstr], streams: &mut IoStreams) // would assert() out, which is a terrible failure mode // So instead, what we do is we get a positive code, // and we avoid 0. - code = ((256 + code) % 256).abs(); - if code == 0 { - code = 255; - } FLOGF!( warning, "builtin %ls returned invalid exit code %d", argv[0], code ); + code = ((256 + code) % 256).abs(); + if code == 0 { + code = 255; + } } ProcStatus::from_exit_code(code) diff --git a/tests/checks/status-value.fish b/tests/checks/status-value.fish index 9c9452130..ce02a45ad 100644 --- a/tests/checks/status-value.fish +++ b/tests/checks/status-value.fish @@ -26,22 +26,22 @@ echo $status # CHECKERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~^ $fish -c 'exit -5' -# CHECKERR: warning: builtin exit returned invalid exit code 251 +# CHECKERR: warning: builtin exit returned invalid exit code -5 echo $status # CHECK: 251 $fish -c 'exit -1' -# CHECKERR: warning: builtin exit returned invalid exit code 255 +# CHECKERR: warning: builtin exit returned invalid exit code -1 echo $status # CHECK: 255 # (we avoid 0, so this is turned into 255 again) $fish -c 'exit -256' -# CHECKERR: warning: builtin exit returned invalid exit code 255 +# CHECKERR: warning: builtin exit returned invalid exit code -256 echo $status # CHECK: 255 $fish -c 'exit -512' -# CHECKERR: warning: builtin exit returned invalid exit code 255 +# CHECKERR: warning: builtin exit returned invalid exit code -512 echo $status # CHECK: 255