diff -upk.orig gzip-1.3.5.orig/gzexe.in gzip-1.3.5/gzexe.in --- gzip-1.3.5.orig/gzexe.in 2005-05-19 14:02:38 +0000 +++ gzip-1.3.5/gzexe.in 2005-05-19 14:02:55 +0000 @@ -42,9 +42,6 @@ if test $# = 0; then exit 1 fi -tmp=gz$$ -trap "rm -f $tmp; exit 1" 1 2 3 5 10 13 15 - decomp=0 res=0 test "$x" = "ungzexe" && decomp=1 @@ -53,12 +50,10 @@ if test "x$1" = "x-d"; then shift fi -echo hi > zfoo1$$ -echo hi > zfoo2$$ -if test -z "`(${CPMOD-cpmod} zfoo1$$ zfoo2$$) 2>&1`"; then - cpmod=${CPMOD-cpmod} +cpmod= +if type ${CPMOD:-cpmod} 2>/dev/null; then + cpmod=${CPMOD:-cpmod} fi -rm -f zfoo[12]$$ tail="" IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" @@ -99,9 +94,14 @@ for i do continue fi case "${i##*/}" in - gzip | tail | sed | chmod | ln | sleep | rm) + chmod | gzip | ln | mktemp | rm | sed | sh | tail) echo "${x}: $i would depend on itself"; continue ;; esac + + tmp=`mktemp -t gzexe.XXXXXXXXXX` || exit 1 + trap 'rc=$?; trap - EXIT; test -z "$tmp" || rm -f -- "$tmp"; exit $rc' \ + EXIT HUP INT QUIT PIPE TERM + if test -z "$cpmod"; then cp -p "$i" $tmp 2>/dev/null || cp "$i" $tmp if test -w $tmp 2>/dev/null; then @@ -112,31 +112,23 @@ for i do fi fi if test $decomp -eq 0; then - sed 1q $0 > $tmp + sed 1q "$0" > $tmp sed "s|^if tail|if $tail|" >> $tmp <<'EOF' -skip=22 -set -C -umask=`umask` -umask 77 -if tail +$skip "$0" | "BINDIR"/gzip -cd > /tmp/gztmp$$; then - umask $umask - /bin/chmod 700 /tmp/gztmp$$ - prog="${0##*/}" - if /bin/ln /tmp/gztmp$$ "/tmp/$prog" 2>/dev/null; then - trap '/bin/rm -f /tmp/gztmp$$ "/tmp/$prog"; exit $res' 0 - (/bin/sleep 5; /bin/rm -f /tmp/gztmp$$ "/tmp/$prog") 2>/dev/null & - /tmp/"$prog" ${1+"$@"}; res=$? - else - trap '/bin/rm -f /tmp/gztmp$$; exit $res' 0 - (/bin/sleep 5; /bin/rm -f /tmp/gztmp$$) 2>/dev/null & - /tmp/gztmp$$ ${1+"$@"}; res=$? - fi +skip=14 +tmpdir=`/bin/mktemp -dt gzexe.XXXXXXXXXX` || exit 1 +prog="${tmpdir}/${0##*/}" +if tail +$skip "$0" | "BINDIR"/gzip -cd > "$prog"; then + /bin/chmod 700 "$prog" + trap '/bin/rm -rf -- "$tmpdir"; exit $res' EXIT + "$prog" ${1+"$@"}; res=$? else - echo Cannot decompress $0; exit 1 + echo "Cannot decompress $0" + /bin/rm -rf "$tmpdir" + exit 1 fi; exit $res EOF gzip -cv9 "$i" >> $tmp || { - /bin/rm -f $tmp + rm -f $tmp echo ${x}: compression not possible for $i, file unchanged. res=1 continue @@ -152,6 +144,7 @@ EOF : else echo ${x}: $i probably not in gzexe format, file unchanged. + rm -f $tmp res=1 continue fi @@ -176,4 +169,5 @@ EOF chmod u-w $i 2>/dev/null fi done +tmp= exit $res diff -upk.orig gzip-1.3.5.orig/zdiff.in gzip-1.3.5/zdiff.in --- gzip-1.3.5.orig/zdiff.in 2005-05-19 14:02:38 +0000 +++ gzip-1.3.5/zdiff.in 2005-05-19 14:02:55 +0000 @@ -46,13 +46,13 @@ elif test $# -eq 2; then case "$2" in *[-.]gz* | *[-.][zZ] | *.t[ga]z) F=`echo "$2" | sed 's|.*/||;s|[-.][zZtga]*||'` - set -C - trap 'rm -f /tmp/"$F".$$; exit 2' HUP INT PIPE TERM 0 - gzip -cdfq "$2" > /tmp/"$F".$$ || exit - gzip -cdfq "$1" | $comp $OPTIONS - /tmp/"$F".$$ + TF=`mktemp -t "$F".XXXXXXXXXX` || exit 1 + trap 'trap - EXIT; rm -f "$TF"; exit 2' EXIT HUP INT PIPE TERM + gzip -cdfq "$2" > "$TF" || exit + gzip -cdfq "$1" | $comp $OPTIONS - "$TF" STAT="$?" - /bin/rm -f /tmp/"$F".$$ || STAT=2 - trap - HUP INT PIPE TERM 0 + rm -f "$TF" || STAT=2 + trap - EXIT HUP INT PIPE TERM exit $STAT;; *) gzip -cdfq "$1" | $comp $OPTIONS - "$2";; diff -upk.orig gzip-1.3.5.orig/znew.in gzip-1.3.5/znew.in --- gzip-1.3.5.orig/znew.in 2005-05-19 14:02:38 +0000 +++ gzip-1.3.5/znew.in 2005-05-19 14:02:55 +0000 @@ -14,29 +14,29 @@ block=1024 # block is the disk block size (best guess, need not be exact) warn="(does not preserve modes and timestamp)" -tmp=/tmp/zfoo.$$ -set -C -echo hi > $tmp.1 -echo hi > $tmp.2 -if test -z "`(${CPMOD-cpmod} $tmp.1 $tmp.2) 2>&1`"; then - cpmod=${CPMOD-cpmod} +cpmod= +cpmodarg= +if type ${CPMOD:-cpmod} 2>/dev/null; then + cpmod=${CPMOD:-cpmod} warn="" fi -if test -z "$cpmod" && ${TOUCH-touch} -r $tmp.1 $tmp.2 2>/dev/null; then - cpmod="${TOUCH-touch}" +if test -z "$cpmod"; then + cpmod=touch cpmodarg="-r" warn="(does not preserve file modes)" fi -# check if GZIP env. variable uses -S or --suffix -gzip -q $tmp.1 -ext=`echo $tmp.1* | sed "s|$tmp.1||"` -rm -f $tmp.[12]* -if test -z "$ext"; then - echo znew: error determining gzip extension - exit 1 -fi +case "$GZIP" in + *-S*) ext=`echo "$GZIP" | sed 's/^.*-S[[:space:]]*\([^[:space:]]*\).*$/\1/'` + ;; + *--suffix=*) ext=`echo "$GZIP" | sed 's/^.*--suffix=\([^[:space:]]*\).*$/\1/'` + ;; + *--suffix*) ext=`echo "$GZIP" | sed 's/^.*--suffix[[:space:]][[:space:]]*\([^[:space:]]*\).*$/\1/'` + ;; + *) ext='.gz' + ;; +esac if test "$ext" = ".Z"; then echo znew: cannot use .Z as gzip extension. exit 1