Problem reported by Jeffrey Walton (Bug#30000).
* gzexe.in, zdiff.in, zgrep.in:
Don’t assume that mktemp works when given no arguments,
as this is not true for macOS. Instead, use a syntax
that should work with coreutils, NetBSD, and macOS.
While we’re in the neighborhood, be more consistent about how program
names are used in temporary file names. Also, watch out for TMPDIR
values that are not absolute file names, since they can cause problems
(e.g., leading "-").
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`
+ tmp=`mktemp "${dir}gzexeXXXXXXXXX"`
else
- tmp=$dir/gzexe$$
+ tmp=${dir}gzexe$$
fi && { cp -p "$file" "$tmp" 2>/dev/null || cp "$file" "$tmp"; } || {
res=$?
printf >&2 '%s\n' "$0: cannot copy $file"
(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 -d`
+ gztmpdir=`mktemp -d "${TMPDIR}gztmpXXXXXXXXX"`
else
- gztmpdir=/tmp/gztmp$$; mkdir $gztmpdir
+ gztmpdir=${TMPDIR}gztmp$$; mkdir $gztmpdir
fi || { (exit 127); exit 127; }
gztmp=$gztmpdir/$0
test -n "$tmp" && rm -f "$tmp"
(exit 2); exit 2
' HUP INT PIPE TERM 0
+ case $TMPDIR in
+ / | /*/) ;;
+ /*) TMPDIR=$TMPDIR/;;
+ *) TMPDIR=/tmp/;;
+ esac
if type mktemp >/dev/null 2>&1; then
- tmp=`mktemp` || exit 2
+ tmp=`mktemp "${TMPDIR}zdiffXXXXXXXXX"` ||
+ exit 2
else
- F=`expr "/$2" : '.*/\(.*\)[-.][zZtga]*$'` || F=$prog
set -C
- tmp=${TMPDIR-/tmp}/$F.$$
+ tmp=${TMPDIR}zdiff$$
fi
gzip -cdfq -- "$2" > "$tmp" || exit 2
gzip_status=$(
test -n "$pattmp" && rm -f "$pattmp"
(exit 2); exit 2
' HUP INT PIPE TERM 0
+ case $TMPDIR in
+ / | /*/) ;;
+ /*) TMPDIR=$TMPDIR/;;
+ *) TMPDIR=/tmp/;;
+ esac
if type mktemp >/dev/null 2>&1; then
- pattmp=$(mktemp) || exit 2
+ pattmp=$(mktemp "${TMPDIR}zgrepXXXXXXXXX") || exit 2
else
set -C
- pattmp=${TMPDIR-/tmp}/zgrep.$$
+ pattmp=${TMPDIR}zgrep$$
fi
eval "cat --$optarg" >"$pattmp" || exit 2
optarg=' "$pattmp"'