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
|
||||
tmp=
|
||||
trap '
|
||||
test -n "$tmp" && rm -f "$tmp"
|
||||
test -n "$tmp" && rm -rf "$tmp"
|
||||
(exit 2); exit 2
|
||||
' HUP INT PIPE TERM 0
|
||||
tmp=`mktemp -t -- "$F.XXXXXX"` || exit 2
|
||||
$xz2 -cdfq -- "$2" > "$tmp" || exit 2
|
||||
tmp=`mktemp -t -d -- "$prog.XXXXXXXXXX"` || exit 2
|
||||
$xz2 -cdfq -- "$2" > "$tmp/$F" || exit 2
|
||||
xz_status=$(
|
||||
exec 4>&1
|
||||
($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- |
|
||||
eval "$cmp" - '"$tmp"' >&3
|
||||
eval "$cmp" - '"$tmp/$F"' >&3
|
||||
)
|
||||
cmp_status=$?
|
||||
rm -f "$tmp" || xz_status=$?
|
||||
rm -rf "$tmp" || xz_status=$?
|
||||
trap - HUP INT PIPE TERM 0
|
||||
(exit $cmp_status)
|
||||
fi;;
|
||||
|
|
Loading…
Reference in New Issue