| 1 | #!/bin/sh | 
 
 
 
 
 | 2 |  | 
 
 
 
 
 | 3 | # Copyright (C) 1998, 2002, 2006, 2007 Free Software Foundation | 
 
 
 
 
 | 4 | # Copyright (C) 1993 Jean-loup Gailly | 
 
 
 
 
 | 5 |  | 
 
 
 
 
 | 6 | # Modified for XZ Utils by Andrew Dudman and Lasse Collin. | 
 
 
 
 
 | 7 |  | 
 
 
 
 
 | 8 | # This program is free software; you can redistribute it and/or modify | 
 
 
 
 
 | 9 | # it under the terms of the GNU General Public License as published by | 
 
 
 
 
 | 10 | # the Free Software Foundation; either version 2 of the License, or | 
 
 
 
 
 | 11 | # (at your option) any later version. | 
 
 
 
 
 | 12 |  | 
 
 
 
 
 | 13 | # This program is distributed in the hope that it will be useful, | 
 
 
 
 
 | 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 
 
 
 
 | 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 
 
 
 
 | 16 | # GNU General Public License for more details. | 
 
 
 
 
 | 17 |  | 
 
 
 
 
 | 18 | #SET_PATH - This line is a placeholder to ease patching this script. | 
 
 
 
 
 | 19 |  | 
 
 
 
 
 | 20 | # Instead of unsetting XZ_OPT, just make sure that xz will use file format | 
 
 
 
 
 | 21 | # autodetection. This way memory usage limit and thread limit can be | 
 
 
 
 
 | 22 | # specified via XZ_OPT. With gzip and bzip2 it's OK to just unset the | 
 
 
 
 
 | 23 | # environment variables. | 
 
 
 
 
 | 24 | xz='xz --format=auto' | 
 
 
 
 
 | 25 | unset GZIP BZIP BZIP2 | 
 
 
 
 
 | 26 |  | 
 
 
 
 
 | 27 | case ${0##*/} in | 
 
 
 
 
 | 28 | *cmp*) prog=xzcmp; cmp=${CMP:-cmp};; | 
 
 
 
 
 | 29 | *)     prog=xzdiff; cmp=${DIFF:-diff};; | 
 
 
 
 
 | 30 | esac | 
 
 
 
 
 | 31 |  | 
 
 
 
 
 | 32 | version="$prog (XZ Utils) 5.0.3" | 
 
 
 
 
 | 33 |  | 
 
 
 
 
 | 34 | usage="Usage: ${0##*/} [OPTION]... FILE1 [FILE2] | 
 
 
 
 
 | 35 | Compare FILE1 to FILE2, using their uncompressed contents if they are | 
 
 
 
 
 | 36 | compressed.  If FILE2 is omitted, then the files compared are FILE1 and | 
 
 
 
 
 | 37 | FILE1 from which the compression format suffix has been stripped. | 
 
 
 
 
 | 38 |  | 
 
 
 
 
 | 39 | Do comparisons like '$cmp' does.  OPTIONs are the same as for '$cmp'. | 
 
 
 
 
 | 40 |  | 
 
 
 
 
 | 41 | Report bugs to <lasse.collin@tukaani.org>." | 
 
 
 
 
 | 42 |  | 
 
 
 
 
 | 43 | # sed script to escape all ' for the shell, and then (to handle trailing | 
 
 
 
 
 | 44 | # newlines correctly) turn trailing X on last line into '. | 
 
 
 
 
 | 45 | escape=' | 
 
 
 
 
 | 46 | s/'\''/'\''\\'\'''\''/g | 
 
 
 
 
 | 47 | $s/X$/'\''/ | 
 
 
 
 
 | 48 | ' | 
 
 
 
 
 | 49 |  | 
 
 
 
 
 | 50 | while :; do | 
 
 
 
 
 | 51 | case $1 in | 
 
 
 
 
 | 52 | --h*) printf '%s\n' "$usage" || exit 2; exit;; | 
 
 
 
 
 | 53 | --v*) echo "$version" || exit 2; exit;; | 
 
 
 
 
 | 54 | --) shift; break;; | 
 
 
 
 
 | 55 | -*\'*) cmp="$cmp '"`printf '%sX\n' "$1" | sed "$escape"`;; | 
 
 
 
 
 | 56 | -?*) cmp="$cmp '$1'";; | 
 
 
 
 
 | 57 | *) break;; | 
 
 
 
 
 | 58 | esac | 
 
 
 
 
 | 59 | shift | 
 
 
 
 
 | 60 | done | 
 
 
 
 
 | 61 | cmp="$cmp --" | 
 
 
 
 
 | 62 |  | 
 
 
 
 
 | 63 | for file; do | 
 
 
 
 
 | 64 | test "X$file" = X- || <"$file" || exit 2 | 
 
 
 
 
 | 65 | done | 
 
 
 
 
 | 66 |  | 
 
 
 
 
 | 67 | xz1=$xz | 
 
 
 
 
 | 68 | xz2=$xz | 
 
 
 
 
 | 69 | xz_status=0 | 
 
 
 
 
 | 70 | exec 3>&1 | 
 
 
 
 
 | 71 |  | 
 
 
 
 
 | 72 | if test $# -eq 1; then | 
 
 
 
 
 | 73 | case $1 in | 
 
 
 
 
 | 74 | *[-.]xz | *[-.]lzma | *.t[lx]z) | 
 
 
 
 
 | 75 | ;; | 
 
 
 
 
 | 76 | *[-.]bz2 | *.tbz | *.tbz2) | 
 
 
 
 
 | 77 | xz1=bzip2;; | 
 
 
 
 
 | 78 | *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) | 
 
 
 
 
 | 79 | xz1=gzip;; | 
 
 
 
 
 | 80 | *) | 
 
 
 
 
 | 81 | echo >&2 "$0: $1: Unknown compressed file name suffix" | 
 
 
 
 
 | 82 | exit 2;; | 
 
 
 
 
 | 83 | esac | 
 
 
 
 
 | 84 | case $1 in | 
 
 
 
 
 | 85 | *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma) | 
 
 
 
 
 | 86 | FILE=`expr "X$1" : 'X\(.*\)[-.][abglmxzZ2]*$'`;; | 
 
 
 
 
 | 87 | *.t[abglx]z) | 
 
 
 
 
 | 88 | FILE=`expr "X$1" : 'X\(.*[-.]t\)[abglx]z$'`ar;; | 
 
 
 
 
 | 89 | *.tbz2) | 
 
 
 
 
 | 90 | FILE=`expr "X$1" : 'X\(.*[-.]t\)bz2$'`ar;; | 
 
 
 
 
 | 91 | esac | 
 
 
 
 
 | 92 | xz_status=$( | 
 
 
 
 
 | 93 | exec 4>&1 | 
 
 
 
 
 | 94 | ($xz1 -cd -- "$1" 4>&-; echo $? >&4) 3>&- | eval "$cmp" - '"$FILE"' >&3 | 
 
 
 
 
 | 95 | ) | 
 
 
 
 
 | 96 | elif test $# -eq 2; then | 
 
 
 
 
 | 97 | case $1 in | 
 
 
 
 
 | 98 | *[-.]bz2 | *.tbz | *.tbz2) xz1=bzip2;; | 
 
 
 
 
 | 99 | *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) xz1=gzip;; | 
 
 
 
 
 | 100 | esac | 
 
 
 
 
 | 101 | case $2 in | 
 
 
 
 
 | 102 | *[-.]bz2 | *.tbz | *.tbz2) xz2=bzip2;; | 
 
 
 
 
 | 103 | *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) xz2=gzip;; | 
 
 
 
 
 | 104 | esac | 
 
 
 
 
 | 105 | case $1 in | 
 
 
 
 
 | 106 | *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | -) | 
 
 
 
 
 | 107 | case "$2" in | 
 
 
 
 
 | 108 | *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | -) | 
 
 
 
 
 | 109 | if test "$1$2" = --; then | 
 
 
 
 
 | 110 | xz_status=$( | 
 
 
 
 
 | 111 | exec 4>&1 | 
 
 
 
 
 | 112 | ($xz1 -cdfq - 4>&-; echo $? >&4) 3>&- | | 
 
 
 
 
 | 113 | eval "$cmp" - - >&3 | 
 
 
 
 
 | 114 | ) | 
 
 
 
 
 | 115 | elif # Reject Solaris 8's buggy /bin/bash 2.03. | 
 
 
 
 
 | 116 | echo X | (echo X | eval "$cmp" /dev/fd/5 - >/dev/null 2>&1) 5<&0; then | 
 
 
 
 
 | 117 | xz_status=$( | 
 
 
 
 
 | 118 | exec 4>&1 | 
 
 
 
 
 | 119 | ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | | 
 
 
 
 
 | 120 | ( ($xz2 -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- </dev/null | | 
 
 
 
 
 | 121 | eval "$cmp" /dev/fd/5 - >&3) 5<&0 | 
 
 
 
 
 | 122 | ) | 
 
 
 
 
 | 123 | case $xz_status in | 
 
 
 
 
 | 124 | *[1-9]*) xz_status=1;; | 
 
 
 
 
 | 125 | *) xz_status=0;; | 
 
 
 
 
 | 126 | esac | 
 
 
 
 
 | 127 | else | 
 
 
 
 
 | 128 | F=`expr "/$2" : '.*/\(.*\)[-.][ablmtxz2]*$'` || F=$prog | 
 
 
 
 
 | 129 | tmp= | 
 
 
 
 
 | 130 | trap ' | 
 
 
 
 
 | 131 | test -n "$tmp" && rm -f "$tmp" | 
 
 
 
 
 | 132 | (exit 2); exit 2 | 
 
 
 
 
 | 133 | ' HUP INT PIPE TERM 0 | 
 
 
 
 
 | 134 | tmp=`mktemp -t -- "$F.XXXXXX"` || exit 2 | 
 
 
 
 
 | 135 | $xz2 -cdfq -- "$2" > "$tmp" || exit 2 | 
 
 
 
 
 | 136 | xz_status=$( | 
 
 
 
 
 | 137 | exec 4>&1 | 
 
 
 
 
 | 138 | ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | | 
 
 
 
 
 | 139 | eval "$cmp" - '"$tmp"' >&3 | 
 
 
 
 
 | 140 | ) | 
 
 
 
 
 | 141 | cmp_status=$? | 
 
 
 
 
 | 142 | rm -f "$tmp" || xz_status=$? | 
 
 
 
 
 | 143 | trap - HUP INT PIPE TERM 0 | 
 
 
 
 
 | 144 | (exit $cmp_status) | 
 
 
 
 
 | 145 | fi;; | 
 
 
 
 
 | 146 | *) | 
 
 
 
 
 | 147 | xz_status=$( | 
 
 
 
 
 | 148 | exec 4>&1 | 
 
 
 
 
 | 149 | ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | | 
 
 
 
 
 | 150 | eval "$cmp" - '"$2"' >&3 | 
 
 
 
 
 | 151 | );; | 
 
 
 
 
 | 152 | esac;; | 
 
 
 
 
 | 153 | *) | 
 
 
 
 
 | 154 | case "$2" in | 
 
 
 
 
 | 155 | *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | -) | 
 
 
 
 
 | 156 | xz_status=$( | 
 
 
 
 
 | 157 | exec 4>&1 | 
 
 
 
 
 | 158 | ($xz2 -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- | | 
 
 
 
 
 | 159 | eval "$cmp" '"$1"' - >&3 | 
 
 
 
 
 | 160 | );; | 
 
 
 
 
 | 161 | *) | 
 
 
 
 
 | 162 | eval "$cmp" '"$1"' '"$2"';; | 
 
 
 
 
 | 163 | esac;; | 
 
 
 
 
 | 164 | esac | 
 
 
 
 
 | 165 | else | 
 
 
 
 
 | 166 | echo >&2 "$0: Invalid number of operands; try \`${0##*/} --help' for help" | 
 
 
 
 
 | 167 | exit 2 | 
 
 
 
 
 | 168 | fi | 
 
 
 
 
 | 169 |  | 
 
 
 
 
 | 170 | cmp_status=$? | 
 
 
 
 
 | 171 | test "$xz_status" -eq 0 || exit 2 | 
 
 
 
 
 | 172 | exit $cmp_status |