diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2012-06-19 17:22:52 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2012-06-19 17:23:32 -0700 |
commit | c8ae982a0f65d04313411ac7346d9e5ac6476797 (patch) | |
tree | 5e55b4f504b50cd2b0192478ec511e853478c4ce /zmore.in | |
parent | 1e785ca6f6bdbf19367321d30abd3b791176c2aa (diff) | |
download | gzip-c8ae982a0f65d04313411ac7346d9e5ac6476797.tar.gz |
zmore: rewrite to fix bugs and assume POSIX
Problem reported for Solaris 9 by Daniel in
<http://lists.gnu.org/archive/html/bug-gzip/2012-06/msg00007.html>.
Rather than figure out what exactly went wrong in Solaris 9
it was easier to rip out all the buggy compatibility and stty cruft.
* zmore.in: Don't use stty or trap; simply pipe the output to 'more'
and let it deal with signals and terminal control.
Use printf, not 'echo', to avoid problems with backslashes.
Don't assume ANS is not 's' in the environment.
Use a 'more'-style header instead of rolling our own style.
Paginate the header, too; the old behavior lost the header.
* NEWS, zmore.1: Document this.
Diffstat (limited to 'zmore.in')
-rw-r--r-- | zmore.in | 66 |
1 files changed, 17 insertions, 49 deletions
@@ -36,57 +36,25 @@ Like 'more', but operate on the uncompressed contents of any compressed FILEs. Report bugs to <bug-gzip@gnu.org>." -if test "`echo -n a`" = "-n a"; then - # looks like a SysV system: - n1=''; n2='\c' -else - n1='-n'; n2='' -fi -oldtty=`stty -g 2>/dev/null` -if stty -cbreak 2>/dev/null; then - cb='cbreak'; ncb='-cbreak' -else - # 'stty min 1' resets eof to ^a on both SunOS and SysV! - cb='min 1 -icanon'; ncb='icanon eof ^d' -fi -if test $? -eq 0 && test -n "$oldtty"; then - trap 'stty $oldtty 2>/dev/null; exit' 0 2 3 5 10 13 15 -else - trap 'stty $ncb echo 2>/dev/null; exit' 0 2 3 5 10 13 15 -fi +case $1 in + --h*) exec printf '%s\n' "$usage";; + --v*) exec printf '%s\n' "$version";; + --) shift;; + -?*) printf >&2 '%s\n' "$0: $1: unknown option; try '$0 --help' for help" + exit 1;; +esac if test $# = 0; then if test -t 0; then - echo >&2 "$0: invalid number of operands; try \`$0 --help' for help" - else - gzip -cdfq | eval ${PAGER-more} + printf >&2 '%s\n' "$0: missing operands; try '$0 --help' for help" + exit 1 fi -else - FIRST=1 - for FILE - do - case $FILE in - --h*) exec echo "$usage";; - --v*) exec echo "$version";; - esac - - < "$FILE" || continue - if test $FIRST -eq 0; then - echo $n1 "--More--(Next file: $FILE)$n2" - stty $cb -echo 2>/dev/null - ANS=`dd bs=1 count=1 2>/dev/null` - stty $ncb echo 2>/dev/null - echo " " - case "$ANS" in - [eq]) exit;; - esac - fi - if test "$ANS" != 's'; then - echo "------> $FILE <------" - gzip -cdfq -- "$FILE" | eval ${PAGER-more} - fi - if test -t 1; then - FIRST=0 - fi - done + set -- - fi + +for FILE +do + test $# -lt 2 || + printf '::::::::::::::\n%s\n::::::::::::::\n' "$FILE" || break + gzip -cdfq -- "$FILE" +done 2>&1 | eval ${PAGER-more} |