diff options
Diffstat (limited to 'src/scripts/xzdiff')
-rwxr-xr-x | src/scripts/xzdiff | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/scripts/xzdiff b/src/scripts/xzdiff new file mode 100755 index 00000000..50179bb9 --- /dev/null +++ b/src/scripts/xzdiff @@ -0,0 +1,67 @@ +#!/bin/sh +# sh is buggy on RS/6000 AIX 3.2. Replace above line with #!/bin/ksh + +# xzcmp and xzdiff are used to invoke the cmp or the diff pro- +# gram on compressed files. All options specified are passed +# directly to cmp or diff. If only 1 file is specified, then +# the files compared are file1 and an uncompressed file1.xz. +# If two files are specified, then they are uncompressed and +# fed to cmp or diff. The exit status from cmp or diff is +# preserved. + +prog=`echo $0 | sed 's|.*/||'` +case "$prog" in + *cmp) comp=${CMP-cmp} ;; + *) comp=${DIFF-diff} ;; +esac + +OPTIONS= +FILES= +for ARG +do + case "$ARG" in + -*) OPTIONS="$OPTIONS $ARG";; + *) if test -f "$ARG"; then + FILES="$FILES $ARG" + else + echo "${prog}: $ARG not found or not a regular file" + exit 2 + fi ;; + esac +done +if test -z "$FILES"; then + echo "Usage: $prog [${comp}_options] file [file]" + exit 2 +fi +set $FILES +if test $# -eq 1; then + FILE=`echo "$1" | sed 's/[-.][almtxz]*$//'` + xz -dc "$1" | $comp $OPTIONS - "$FILE" + +elif test $# -eq 2; then + case "$1" in + *[-.]xz | *.txz | *[-.]lzma | *.tlz) + case "$2" in + *[-.]xz | *.txz | *[-.]lzma | *.tlz) + F=`echo "$2" | sed 's|.*/||;s|[-.][almtxz]*||'` + TF=`/usr/bin/mktemp ${TMPDIR:-/tmp}/"$F".XXXXXXXXXX` || exit 1 + trap 'rm -f "$TF"; exit 2' EXIT HUP INT PIPE TERM + xz -dc -- "$2" > "$TF" || exit + xz -dc -- "$1" | $comp $OPTIONS - "$TF" + STAT="$?" + rm -f "$TF" || STAT=2 + trap EXIT HUP INT PIPE TERM + exit $STAT;; + + *) xz -dc -- "$1" | $comp $OPTIONS - "$2";; + esac;; + *) case "$2" in + *[-.]xz | *.txz | *[-.]lzma | *.tlz) + xz -dc -- "$2" | $comp $OPTIONS "$1" -;; + *) $comp $OPTIONS "$1" "$2";; + esac;; + esac +else + echo "Usage: $prog [${comp}_options] file [file]" + exit 2 +fi |