1 1.1 mrg #!/bin/sh - 2 1.1 mrg # 3 1.5 joerg # $NetBSD: zdiff,v 1.5 2010/04/14 20:30:28 joerg Exp $ 4 1.2 wiz # 5 1.1 mrg # $OpenBSD: zdiff,v 1.2 2003/07/29 07:42:44 otto Exp $ 6 1.1 mrg # 7 1.1 mrg # Copyright (c) 2003 Todd C. Miller <Todd.Miller (at] courtesan.com> 8 1.4 joerg # Copyright (c) 2010 Joerg Sonnenberger <joerg (at] NetBSD.org> 9 1.1 mrg # 10 1.1 mrg # Permission to use, copy, modify, and distribute this software for any 11 1.1 mrg # purpose with or without fee is hereby granted, provided that the above 12 1.1 mrg # copyright notice and this permission notice appear in all copies. 13 1.1 mrg # 14 1.1 mrg # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 15 1.1 mrg # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 16 1.1 mrg # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 17 1.1 mrg # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 18 1.1 mrg # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 19 1.1 mrg # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 20 1.1 mrg # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 1.1 mrg # 22 1.1 mrg # Sponsored in part by the Defense Advanced Research Projects 23 1.1 mrg # Agency (DARPA) and Air Force Research Laboratory, Air Force 24 1.1 mrg # Materiel Command, USAF, under agreement number F39502-99-1-0512. 25 1.1 mrg # 26 1.1 mrg 27 1.1 mrg # Set $prog based on $0 28 1.1 mrg case $0 in 29 1.1 mrg *cmp) prog=cmp 30 1.1 mrg ;; 31 1.1 mrg *) prog=diff 32 1.1 mrg ;; 33 1.1 mrg esac 34 1.4 joerg USAGE="usage: $0 [options] file1 [file2]" 35 1.4 joerg 36 1.4 joerg check_suffix() { 37 1.4 joerg case "$1" in 38 1.4 joerg *[._-][Zz]) 39 1.4 joerg setvar $2 "${1%??}" 40 1.4 joerg setvar $3 "gzip -cdqf" 41 1.4 joerg ;; 42 1.4 joerg *[._-]bz) 43 1.4 joerg setvar $2 "${1%???}" 44 1.4 joerg setvar $3 "bzip2 -cdqf" 45 1.4 joerg ;; 46 1.4 joerg *[._-]gz) 47 1.4 joerg setvar $2 "${1%???}" 48 1.4 joerg setvar $3 "gzip -cdqf" 49 1.4 joerg ;; 50 1.4 joerg *[._-]xz) 51 1.4 joerg setvar $2 "${1%???}" 52 1.4 joerg setvar $3 "xz -cdqf" 53 1.4 joerg ;; 54 1.4 joerg *[._-]bz2) 55 1.4 joerg setvar $2 "${1%????}" 56 1.4 joerg setvar $3 "bzip2 -cdqf" 57 1.4 joerg ;; 58 1.4 joerg *[._-]lzma) 59 1.4 joerg setvar $2 "${1%?????}" 60 1.4 joerg setvar $3 "xz -cdqf" 61 1.4 joerg ;; 62 1.4 joerg *.t[ag]z) 63 1.4 joerg setvar $2 "${1%??}"ar 64 1.4 joerg setvar $3 "gzip -cdqf" 65 1.4 joerg ;; 66 1.4 joerg *.tbz) 67 1.4 joerg setvar $2 "${1%??}"ar 68 1.4 joerg setvar $3 "bzip2 -cdqf" 69 1.4 joerg ;; 70 1.4 joerg *.tbz2) 71 1.4 joerg setvar $2 "${1%???}"ar 72 1.4 joerg setvar $3 "bzip2 -cdqf" 73 1.4 joerg ;; 74 1.4 joerg *.t[lx]z) 75 1.4 joerg setvar $2 "${1%??}"ar 76 1.4 joerg setvar $3 "xz -cdqf" 77 1.4 joerg ;; 78 1.4 joerg *) 79 1.4 joerg setvar $2 "$1" 80 1.4 joerg setvar $3 "" 81 1.4 joerg ;; 82 1.4 joerg esac 83 1.4 joerg } 84 1.4 joerg 85 1.1 mrg 86 1.1 mrg # Pull out any command line flags so we can pass them to diff/cmp 87 1.1 mrg # XXX - assumes there is no optarg 88 1.1 mrg flags= 89 1.1 mrg while test $# -ne 0; do 90 1.1 mrg case "$1" in 91 1.1 mrg --) 92 1.1 mrg shift 93 1.1 mrg break 94 1.1 mrg ;; 95 1.4 joerg -) 96 1.4 joerg break 97 1.4 joerg ;; 98 1.1 mrg -*) 99 1.1 mrg flags="$flags $1" 100 1.1 mrg shift 101 1.1 mrg ;; 102 1.1 mrg *) 103 1.1 mrg break 104 1.1 mrg ;; 105 1.1 mrg esac 106 1.1 mrg done 107 1.1 mrg 108 1.1 mrg if [ $# -eq 1 ]; then 109 1.1 mrg # One file given, compare compressed to uncompressed 110 1.1 mrg files="$1" 111 1.4 joerg check_suffix "$1" files filt 112 1.4 joerg if [ -z "$filt" ]; then 113 1.4 joerg echo "z$prog: unknown suffix" 1>&2 114 1.4 joerg exit 1 115 1.4 joerg fi 116 1.5 joerg $filt -- "$1" | $prog $flags -- - "$files" 117 1.1 mrg status=$? 118 1.1 mrg elif [ $# -eq 2 ]; then 119 1.1 mrg # Two files given, compare the two uncompressing as needed 120 1.4 joerg check_suffix "$1" files filt 121 1.4 joerg check_suffix "$2" files2 filt2 122 1.4 joerg if [ -z "$filt" -a -z "$filt2" ]; then 123 1.5 joerg $prog $flags -- "$1" "$2" 124 1.4 joerg elif [ -z "$filt" -a -n "$filt2" -a "$1" != "-" ]; then 125 1.5 joerg $filt2 -- "$2" | $prog $flags -- "$1" - 126 1.4 joerg elif [ -n "$filt" -a -z "$filt2" -a "$2" != "-" ]; then 127 1.5 joerg $filt -- "$1" | $prog $flags -- - "$2" 128 1.1 mrg else 129 1.4 joerg tmp=`mktemp -t z$prog.XXXXXXXXXX` || exit 1 130 1.4 joerg trap "rm -f $tmp" 0 1 2 3 13 15 131 1.5 joerg ${filt2:-cat} -- "$2" > $tmp || exit $? 132 1.5 joerg ${filt:-cat} -- "$1" | $prog $flags -- - "$tmp" 133 1.1 mrg fi 134 1.1 mrg status=$? 135 1.1 mrg else 136 1.1 mrg echo "$USAGE" 1>&2 137 1.1 mrg exit 1 138 1.1 mrg fi 139 1.1 mrg 140 1.1 mrg exit $status 141