blob: 57086c82aef6ae70fd2feb13f5e78a42a4632cbc [file] [log] [blame]
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