diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2011-11-02 14:27:33 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2011-11-02 14:27:53 -0700 |
commit | 26744e7953dc67500eb627b7f50d943bd2dca1cc (patch) | |
tree | 35fa141e15f6ecaf2645ffe09d7e58b02102cfdc | |
parent | 52f91717e943862ab5b830192cc2595b3273dd1b (diff) | |
download | gzip-26744e7953dc67500eb627b7f50d943bd2dca1cc.tar.gz |
* tests/zgrep-signal: Use perl instead of a nonportable shell trap.
Problem reported by Eric Blake in
<http://lists.gnu.org/archive/html/bug-gzip/2011-11/msg00005.html>.
-rw-r--r-- | tests/zgrep-signal | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/tests/zgrep-signal b/tests/zgrep-signal index 3c5b696..e19293a 100644 --- a/tests/zgrep-signal +++ b/tests/zgrep-signal @@ -22,17 +22,33 @@ echo a | gzip -c > f.gz || framework_failure_ -if (trap - PIPE) >/dev/null 2>&1; then - trap - PIPE -else - trap 13 -fi -st=$(exec 3>&1; (cat f.gz f.gz; echo $? >&3) | :) +test "x$PERL" = x && PERL=perl +("$PERL" -e 'use warnings') >/dev/null 2>&1 || skip_ "no suitable perl found" + +exec_with_SIGPIPE_SIG_DFL () { + program=${1?} + shift + args= + for arg; do + args="$args, '$arg'" + done + "$PERL" -e "\$SIG{PIPE} = 'DEFAULT'; exec '$program'$args" +} + +write_to_dangling_pipe () { + exec 3>&1 + ( + exec_with_SIGPIPE_SIG_DFL "$@" + echo $? >&3 + ) | : || framework_failure_ +} + +st=$(write_to_dangling_pipe cat f.gz f.gz) test "$st" = 141 || framework_failure_ 'signal handling busted on this host' fail=0 -st=$(exec 3>&1; (zgrep a f.gz f.gz; echo $? >&3) | :) || framework_failure_ +st=$(write_to_dangling_pipe zgrep a f.gz f.gz) test "$st" = 141 || fail=1 |