X-Git-Url: https://git.gag.com/?p=debian%2Fgzip;a=blobdiff_plain;f=gzexe.in;h=3076b6808ba2ec22070da32c6b3963f711921931;hp=e59b5fc38c9a4a53f93f8be65e5eb097b077e965;hb=659cae49714b93487242525dfa0e5737463d78d8;hpb=dc0ab95dbae38577efebe2283fc9b76e92ef4233 diff --git a/gzexe.in b/gzexe.in index e59b5fc..3076b68 100644 --- a/gzexe.in +++ b/gzexe.in @@ -13,7 +13,8 @@ # On Ultrix, /bin/sh is too buggy, change the first line to: #!/bin/sh5 -# Copyright (C) 1998, 2002, 2004, 2006, 2007 Free Software Foundation +# Copyright (C) 1998, 2002, 2004, 2006-2007, 2010-2018 Free Software +# Foundation, Inc. # Copyright (C) 1993 Jean-loup Gailly # This program is free software; you can redistribute it and/or modify @@ -36,15 +37,16 @@ nl=' IFS=" $tab$nl" version='gzexe (gzip) @VERSION@ -Copyright (C) 2007, 2009-2010 Free Software Foundation, Inc. +Copyright (C) 2007, 2011-2018 Free Software Foundation, Inc. This is free software. You may redistribute copies of it under the terms of -the GNU General Public License . +the GNU General Public License . There is NO WARRANTY, to the extent permitted by law. Written by Jean-loup Gailly.' usage="Usage: $0 [OPTION] FILE... -Rename each FILE with a compressed version of itself, renaming FILE to FILE~. +Replace each executable FILE with a compressed version of itself. +Make a backup FILE~ of the old version of FILE. -d Decompress each FILE instead of compressing it. --help display this help and exit @@ -52,27 +54,20 @@ Rename each FILE with a compressed version of itself, renaming FILE to FILE~. Report bugs to ." - -bindir=@bindir@ -case $1 in ---__bindir) bindir=${2?}; shift; shift;; -esac -PATH=$bindir:$PATH - decomp=0 res=0 while :; do case $1 in -d) decomp=1; shift;; - --h*) exec echo "$usage";; - --v*) exec echo "$version";; + --h*) printf '%s\n' "$usage" || exit 1; exit;; + --v*) printf '%s\n' "$version" || exit 1; exit;; --) shift; break;; *) break;; esac done if test $# -eq 0; then - echo >&2 "$0: missing operand + printf >&2 '%s\n' "$0: missing operand Try \`$0 --help' for more information." exit 1 fi @@ -92,29 +87,29 @@ for i do esac if test ! -f "$file" || test ! -r "$file"; then res=$? - echo >&2 "$0: $i is not a readable regular file" + printf >&2 '%s\n' "$0: $i is not a readable regular file" continue fi if test $decomp -eq 0; then if sed -e 1d -e 2q "$file" | grep "^skip=[0-9][0-9]*$" >/dev/null; then - echo >&2 "$0: $i is already gzexe'd" + printf >&2 '%s\n' "$0: $i is already gzexe'd" continue fi fi if test -u "$file"; then - echo >&2 "$0: $i has setuid permission, unchanged" + printf >&2 '%s\n' "$0: $i has setuid permission, unchanged" continue fi if test -g "$file"; then - echo >&2 "$0: $i has setgid permission, unchanged" + printf >&2 '%s\n' "$0: $i has setgid permission, unchanged" continue fi case /$file in */basename | */bash | */cat | */chmod | */cp | \ - */dirname | */echo | */expr | */gzip | \ - */ln | */mkdir | */mktemp | */mv | */rm | \ + */dirname | */expr | */gzip | \ + */ln | */mkdir | */mktemp | */mv | */printf | */rm | \ */sed | */sh | */sleep | */test | */tail) - echo >&2 "$0: $i might depend on itself"; continue;; + printf >&2 '%s\n' "$0: $i might depend on itself"; continue;; esac dir=`dirname "$file"` || dir=$TMPDIR @@ -124,13 +119,17 @@ for i do type mktemp >/dev/null 2>&1 mktemp_status=$? fi + case $dir in + */) ;; + *) dir=$dir/;; + esac if test $mktemp_status -eq 0; then - tmp=`TMPDIR=$dir mktemp -t gzexeXXXXXX` + tmp=`mktemp "${dir}gzexeXXXXXXXXX"` else - tmp=$dir/gzexe$$ + tmp=${dir}gzexe$$ fi && { cp -p "$file" "$tmp" 2>/dev/null || cp "$file" "$tmp"; } || { res=$? - echo >&2 "$0: cannot copy $file" + printf >&2 '%s\n' "$0: cannot copy $file" continue } if test -w "$tmp"; then @@ -139,7 +138,7 @@ for i do writable=0 chmod u+w "$tmp" || { res=$? - echo >&2 "$0: cannot chmod $tmp" + printf >&2 '%s\n' "$0: cannot chmod $tmp" continue } fi @@ -162,10 +161,15 @@ trap 'res=$? (exit $res); exit $res ' 0 1 2 3 5 10 13 15 +case $TMPDIR in + / | /*/) ;; + /*) TMPDIR=$TMPDIR/;; + *) TMPDIR=/tmp/;; +esac if type mktemp >/dev/null 2>&1; then - gztmpdir=`mktemp -dt` + gztmpdir=`mktemp -d "${TMPDIR}gztmpXXXXXXXXX"` else - gztmpdir=/tmp/gztmp$$; mkdir $gztmpdir + gztmpdir=${TMPDIR}gztmp$$; mkdir $gztmpdir fi || { (exit 127); exit 127; } gztmp=$gztmpdir/$0 @@ -175,7 +179,7 @@ case $0 in */*) gztmp=$gztmpdir/`basename "$0"`;; esac || { (exit 127); exit 127; } -case `echo X | tail -n +1 2>/dev/null` in +case `printf 'X\n' | tail -n +1 2>/dev/null` in X) tail_n=-n;; *) tail_n=;; esac @@ -185,13 +189,13 @@ if tail $tail_n +$skip <"$0" | gzip -cd > "$gztmp"; then (sleep 5; rm -fr "$gztmpdir") 2>/dev/null & "$gztmp" ${1+"$@"}; res=$? else - echo >&2 "Cannot decompress $0" + printf >&2 '%s\n' "Cannot decompress $0" (exit 127); res=127 fi; exit $res EOF gzip -cv9 "$file") > "$tmp" || { res=$? - echo >&2 "$0: compression not possible for $i, file unchanged." + printf >&2 '%s\n' "$0: compression not possible for $i, file unchanged." continue } @@ -203,29 +207,32 @@ EOF skip=[0-9] | skip=[0-9][0-9] | skip=[0-9][0-9][0-9]) eval "$skip_line";; esac - case `echo X | tail -n +1 2>/dev/null` in + case `printf 'X\n' | tail -n +1 2>/dev/null` in X) tail_n=-n;; *) tail_n=;; esac tail $tail_n +$skip "$file" | gzip -cd > "$tmp" || { res=$? - echo >&2 "$0: $i probably not in gzexe format, file unchanged." + printf >&2 '%s\n' "$0: $i probably not in gzexe format, file unchanged." continue } fi test $writable -eq 1 || chmod u-w "$tmp" || { res=$? - echo >&2 "$0: $tmp: cannot chmod" + printf >&2 '%s\n' "$0: $tmp: cannot chmod" continue } - ln -f "$file" "$file~" || { + ln -f "$file" "$file~" 2>/dev/null || { + # Hard links may not work. Fall back on rm+cp so that $file always exists. + rm -f "$file~" && cp -p "$file" "$file~" + } || { res=$? - echo >&2 "$0: cannot backup $i as $i~" + printf >&2 '%s\n' "$0: cannot backup $i as $i~" continue } mv -f "$tmp" "$file" || { res=$? - echo >&2 "$0: cannot rename $tmp to $i" + printf >&2 '%s\n' "$0: cannot rename $tmp to $i" continue } tmp=