--- gzexe.in.orig 2004-06-23 19:17:49.978676668 -0400 +++ gzexe.in 2004-06-23 19:22:38.651945744 -0400 @@ -42,8 +42,10 @@ exit 1 fi +set -C tmp=gz$$ trap "rm -f $tmp; exit 1" 1 2 3 5 10 13 15 +: > $tmp || exit 1 decomp=0 res=0 @@ -53,8 +55,8 @@ shift fi -echo hi > zfoo1$$ -echo hi > zfoo2$$ +echo hi > zfoo1$$ || exit 1 +echo hi > zfoo2$$ || exit 1 if test -z "`(${CPMOD-cpmod} zfoo1$$ zfoo2$$) 2>&1`"; then cpmod=${CPMOD-cpmod} fi @@ -110,26 +112,28 @@ writable=0 chmod u+w $tmp 2>/dev/null fi + : >| $tmp # truncate the file, ignoring set -C 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 +skip=23 set -C umask=`umask` umask 77 -if tail +$skip "$0" | /bin/gzip -cd > /tmp/gztmp$$; then +tmpfile=`tempfile -p gztmp -d /tmp` || exit 1 +if tail +$skip "$0" | /bin/gzip -cd >> $tmpfile; then umask $umask - /bin/chmod 700 /tmp/gztmp$$ + /bin/chmod 700 $tmpfile prog="`echo $0 | /bin/sed 's|^.*/||'`" - 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 & + if /bin/ln $tmpfile "/tmp/$prog" 2>/dev/null; then + trap '/bin/rm -f $tmpfile "/tmp/$prog"; exit $res' 0 + (/bin/sleep 5; /bin/rm -f $tmpfile "/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=$? + trap '/bin/rm -f $tmpfile; exit $res' 0 + (/bin/sleep 5; /bin/rm -f $tmpfile) 2>/dev/null & + $tmpfile ${1+"$@"}; res=$? fi else echo Cannot decompress $0; exit 1 @@ -144,11 +148,11 @@ else # decompression - skip=22 + skip=23 if sed -e 1d -e 2q "$i" | grep "^skip=[0-9][0-9]*$" >/dev/null; then eval `sed -e 1d -e 2q "$i"` fi - if tail +$skip "$i" | gzip -cd > $tmp; then + if $tail +$skip "$i" | gzip -cd >> $tmp; then : else echo ${x}: $i probably not in gzexe format, file unchanged.