xzdiff: Create a temporary directory to hold a temporary file.
This avoids the possibility of "File name too long" when creating a temp file when the input file name is very long. This also means that other users on the system can no longer see the input file names in /tmp (or whatever $TMPDIR is) since the temporary directory will have a generic name. This usually doesn't matter since on many systems one can see the arguments given to all processes anyway. The number X chars to mktemp where increased from 6 to 10. Note that with some shells temp files or dirs won't be used at all.
This commit is contained in:
parent
7716dcf9df
commit
f8c13e5e36
|
@ -136,18 +136,18 @@ elif test $# -eq 2; then
|
||||||
F=`expr "/$2" : '.*/\(.*\)[-.][ablmotxz2]*$'` || F=$prog
|
F=`expr "/$2" : '.*/\(.*\)[-.][ablmotxz2]*$'` || F=$prog
|
||||||
tmp=
|
tmp=
|
||||||
trap '
|
trap '
|
||||||
test -n "$tmp" && rm -f "$tmp"
|
test -n "$tmp" && rm -rf "$tmp"
|
||||||
(exit 2); exit 2
|
(exit 2); exit 2
|
||||||
' HUP INT PIPE TERM 0
|
' HUP INT PIPE TERM 0
|
||||||
tmp=`mktemp -t -- "$F.XXXXXX"` || exit 2
|
tmp=`mktemp -t -d -- "$prog.XXXXXXXXXX"` || exit 2
|
||||||
$xz2 -cdfq -- "$2" > "$tmp" || exit 2
|
$xz2 -cdfq -- "$2" > "$tmp/$F" || exit 2
|
||||||
xz_status=$(
|
xz_status=$(
|
||||||
exec 4>&1
|
exec 4>&1
|
||||||
($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- |
|
($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- |
|
||||||
eval "$cmp" - '"$tmp"' >&3
|
eval "$cmp" - '"$tmp/$F"' >&3
|
||||||
)
|
)
|
||||||
cmp_status=$?
|
cmp_status=$?
|
||||||
rm -f "$tmp" || xz_status=$?
|
rm -rf "$tmp" || xz_status=$?
|
||||||
trap - HUP INT PIPE TERM 0
|
trap - HUP INT PIPE TERM 0
|
||||||
(exit $cmp_status)
|
(exit $cmp_status)
|
||||||
fi;;
|
fi;;
|
||||||
|
|
Loading…
Reference in New Issue