| From: Lasse Collin <lasse.collin@tukaani.org> |
| Date: Wed, 22 Feb 2012 14:02:34 +0200 |
| Subject: 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. |
| --- |
| src/scripts/xzgrep.in | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| diff --git a/src/scripts/xzgrep.in b/src/scripts/xzgrep.in |
| index bfa9fb53..cbc6b238 100644 |
| --- a/src/scripts/xzgrep.in |
| +++ b/src/scripts/xzgrep.in |
| @@ -190,7 +190,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 |
| -- |
| 1.7.10.2 |
| |