summaryrefslogtreecommitdiff
path: root/gzexe.in
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2018-01-06 14:59:47 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2018-01-06 15:02:02 -0800
commit63aa2268a5abfed0116d04bbe3952e4a753af91d (patch)
tree5e04f5cf72d52168a57bd6fdbd641bae4a405f6c /gzexe.in
parent975508caa09d733099498ff9f7b8079cd71d7109 (diff)
downloadgzip-63aa2268a5abfed0116d04bbe3952e4a753af91d.tar.gz
gzexe: port to macOS mktemp
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 "-").
Diffstat (limited to 'gzexe.in')
-rw-r--r--gzexe.in17
1 files changed, 13 insertions, 4 deletions
diff --git a/gzexe.in b/gzexe.in
index 62f8960..6c61183 100644
--- a/gzexe.in
+++ b/gzexe.in
@@ -119,10 +119,14 @@ 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`
+ 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"
@@ -157,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 -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