Patch from Bastian Blank to fix a problem when runing find under ash.
authorGlenn L McGrath <bug1@ihug.co.nz>
Mon, 15 Sep 2003 14:42:39 +0000 (14:42 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Mon, 15 Sep 2003 14:42:39 +0000 (14:42 -0000)
"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."

shell/ash.c

index 2146349abbbdf992a2c1c1efe17b0990826ab95c..0cdfd2b1c9785e23d7cd7b19349e35a6fa42c562 100644 (file)
@@ -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)