# 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
# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
IFS=" $tab$nl"
version='gzexe (gzip) @VERSION@
-Copyright (C) 2007 Free Software Foundation, Inc.
+Copyright (C) 2007, 2011-2017 Free Software Foundation, Inc.
This is free software. You may redistribute copies of it under the terms of
-the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
+the GNU General Public License <https://www.gnu.org/licenses/gpl.html>.
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
Report bugs to <bug-gzip@gnu.org>."
-
-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
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
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
writable=0
chmod u+w "$tmp" || {
res=$?
- echo >&2 "$0: cannot chmod $tmp"
+ printf >&2 '%s\n' "$0: cannot chmod $tmp"
continue
}
fi
(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
*/*) 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
(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
}
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=