summaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorGlenn L McGrath2003-09-15 14:42:39 +0000
committerGlenn L McGrath2003-09-15 14:42:39 +0000
commita3822de23e8d2b1c173eab6925676de54c38b6f2 (patch)
tree3a11af1cde739c63d4dbf8f1f15a7814d4a13d3b /shell
parente16ab475ad1ecaad09e714458f441057f7a49ea9 (diff)
downloadbusybox-a3822de23e8d2b1c173eab6925676de54c38b6f2.zip
busybox-a3822de23e8d2b1c173eab6925676de54c38b6f2.tar.gz
Patch from Bastian Blank to fix a problem when runing find under ash.
"If the shell is compiled with -DJOBS, this is all fine -- find wasn't stopped (it was killed), so it correctly uses WTERMSIG instead of WSTOPSIG. However, if the shell _isn't_ compiled with -DJOBS (which it isn't in d-i), only WSTOPSIG is used, which extracts the high byte instead of the low byte from the status code. Since the status code is 13 (SIGPIPE), "st" suddenly gets the value 0, which is equivalent to SIGEXIT. Thus, ash prints out "EXIT" on find's exit."
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 2146349..0cdfd2b 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -6683,10 +6683,10 @@ sprint_status(char *s, int status, int sigonly)
col = 0;
st = WEXITSTATUS(status);
if (!WIFEXITED(status)) {
- st = WSTOPSIG(status);
+ st = WTERMSIG(status);
#if JOBS
- if (!WIFSTOPPED(status))
- st = WTERMSIG(status);
+ if (WIFSTOPPED(status))
+ st = WSTOPSIG(status);
#endif
if (sigonly) {
if (st == SIGINT || st == SIGPIPE)