diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2012-02-22 14:02:34 +0200 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2012-02-22 14:02:34 +0200 |
commit | cff070aba6281ba743d29a62b8c0c66e5da4b2a6 (patch) | |
tree | 2af7250c1d46376584eef166b649a69a694cfd1d /src/scripts | |
parent | Update THANKS. (diff) | |
download | xz-cff070aba6281ba743d29a62b8c0c66e5da4b2a6.tar.xz |
Fix exit status of xzgrep when grepping binary files.
When grepping binary files, grep may exit before it has
read all the input. In this case, gzip -q returns 2 (eating
SIGPIPE), but xz and bzip2 show SIGPIPE as the exit status
(e.g. 141). This causes wrong exit status when grepping
xz- or bzip2-compressed binary files.
The fix checks for the special exit status that indicates SIGPIPE.
It uses kill -l which should be supported everywhere since it
is in both SUSv2 (1997) and POSIX.1-2008.
Thanks to James Buren for the bug report.
Diffstat (limited to 'src/scripts')
-rw-r--r-- | src/scripts/xzgrep.in | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/scripts/xzgrep.in b/src/scripts/xzgrep.in index 9e25b53a..d8e9bb58 100644 --- a/src/scripts/xzgrep.in +++ b/src/scripts/xzgrep.in @@ -195,7 +195,8 @@ for i; do fi >&3 5>&- ) r=$? - test "$xz_status" -eq 0 || test "$xz_status" -eq 2 || r=2 + test "$xz_status" -eq 0 || test "$xz_status" -eq 2 \ + || test "$(kill -l "$xz_status" 2> /dev/null)" = "PIPE" || r=2 test $res -lt $r && res=$r done exit $res |