mirror of
https://git.tukaani.org/xz.git
synced 2024-04-04 12:36:23 +02:00
Fix exit status of "xzdiff foo.xz bar.xz".
xzdiff was clobbering the exit status from diff in a case statement used to analyze the exit statuses from "xz" when its operands were two compressed files. Save and restore diff's exit status to fix this. The bug is inherited from zdiff in GNU gzip and was fixed there on 2009-10-09. Thanks to Jonathan Nieder for the patch and to Peter Pallinger for reporting the bug.
This commit is contained in:
parent
324cde7a86
commit
1c673e5681
3 changed files with 59 additions and 1 deletions
|
@ -126,10 +126,12 @@ elif test $# -eq 2; then
|
|||
( ($xz2 -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- </dev/null |
|
||||
eval "$cmp" /dev/fd/5 - >&3) 5<&0
|
||||
)
|
||||
cmp_status=$?
|
||||
case $xz_status in
|
||||
*[1-9]*) xz_status=1;;
|
||||
*) xz_status=0;;
|
||||
esac
|
||||
(exit $cmp_status)
|
||||
else
|
||||
F=`expr "/$2" : '.*/\(.*\)[-.][ablmotxz2]*$'` || F=$prog
|
||||
tmp=
|
||||
|
|
|
@ -10,6 +10,7 @@ EXTRA_DIST = \
|
|||
tests.h \
|
||||
test_files.sh \
|
||||
test_compress.sh \
|
||||
test_scripts.sh \
|
||||
bcj_test.c \
|
||||
compress_prepared_bcj_sparc \
|
||||
compress_prepared_bcj_x86
|
||||
|
@ -42,7 +43,8 @@ TESTS = \
|
|||
test_block_header \
|
||||
test_index \
|
||||
test_files.sh \
|
||||
test_compress.sh
|
||||
test_compress.sh \
|
||||
test_scripts.sh
|
||||
|
||||
clean-local:
|
||||
-rm -f compress_generated_*
|
||||
|
|
54
tests/test_scripts.sh
Executable file
54
tests/test_scripts.sh
Executable file
|
@ -0,0 +1,54 @@
|
|||
#!/bin/sh
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Author: Jonathan Nieder
|
||||
#
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
# If scripts weren't built, this test is skipped.
|
||||
XZ=../src/xz/xz
|
||||
XZDIFF=../src/scripts/xzdiff
|
||||
test -x "$XZ" || XZ=
|
||||
test -r "$XZDIFF" || XZDIFF=
|
||||
if test -z "$XZ" || test -z "$XZDIFF"; then
|
||||
(exit 77)
|
||||
exit 77
|
||||
fi
|
||||
|
||||
PATH=`pwd`/../src/xz:$PATH
|
||||
export PATH
|
||||
|
||||
preimage=$srcdir/files/good-1-check-crc32.xz
|
||||
samepostimage=$srcdir/files/good-1-check-crc64.xz
|
||||
otherpostimage=$srcdir/files/good-1-lzma2-1.xz
|
||||
|
||||
sh "$XZDIFF" "$preimage" "$samepostimage" >/dev/null
|
||||
status=$?
|
||||
if test "$status" != 0 ; then
|
||||
echo "xzdiff with no changes exited with status $status != 0"
|
||||
(exit 1)
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sh "$XZDIFF" "$preimage" "$otherpostimage" >/dev/null
|
||||
status=$?
|
||||
if test "$status" != 1 ; then
|
||||
echo "xzdiff with changes exited with status $status != 1"
|
||||
(exit 1)
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sh "$XZDIFF" "$preimage" "$srcdir/files/missing.xz" >/dev/null 2>&1
|
||||
status=$?
|
||||
if test "$status" != 2 ; then
|
||||
echo "xzdiff with missing operand exited with status $status != 2"
|
||||
(exit 1)
|
||||
exit 1
|
||||
fi
|
||||
|
||||
(exit 0)
|
||||
exit 0
|
Loading…
Reference in a new issue