summaryrefslogtreecommitdiff
path: root/zmore.in
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2012-06-19 17:22:52 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2012-06-19 17:23:32 -0700
commitc8ae982a0f65d04313411ac7346d9e5ac6476797 (patch)
tree5e55b4f504b50cd2b0192478ec511e853478c4ce /zmore.in
parent1e785ca6f6bdbf19367321d30abd3b791176c2aa (diff)
downloadgzip-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.in66
1 files changed, 17 insertions, 49 deletions
diff --git a/zmore.in b/zmore.in
index 593f52c..148e0dd 100644
--- a/zmore.in
+++ b/zmore.in
@@ -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}