19a9ea25fSXin LI#!/bin/sh - 29a9ea25fSXin LI# 3*be07528cSXin LI# $NetBSD: zdiff,v 1.5 2010/04/14 20:30:28 joerg Exp $ 4*be07528cSXin LI# 59a9ea25fSXin LI# $OpenBSD: zdiff,v 1.2 2003/07/29 07:42:44 otto Exp $ 69a9ea25fSXin LI# 79a9ea25fSXin LI#- 89a9ea25fSXin LI# Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com> 9*be07528cSXin LI# Copyright (c) 2010 Joerg Sonnenberger <joerg@NetBSD.org> 109a9ea25fSXin LI# 119a9ea25fSXin LI# Permission to use, copy, modify, and distribute this software for any 129a9ea25fSXin LI# purpose with or without fee is hereby granted, provided that the above 139a9ea25fSXin LI# copyright notice and this permission notice appear in all copies. 149a9ea25fSXin LI# 159a9ea25fSXin LI# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 169a9ea25fSXin LI# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 179a9ea25fSXin LI# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 189a9ea25fSXin LI# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 199a9ea25fSXin LI# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 209a9ea25fSXin LI# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 219a9ea25fSXin LI# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 229a9ea25fSXin LI# 239a9ea25fSXin LI# Sponsored in part by the Defense Advanced Research Projects 249a9ea25fSXin LI# Agency (DARPA) and Air Force Research Laboratory, Air Force 259a9ea25fSXin LI# Materiel Command, USAF, under agreement number F39502-99-1-0512. 269a9ea25fSXin LI# 279a9ea25fSXin LI# $FreeBSD$ 289a9ea25fSXin LI 299a9ea25fSXin LI# Set $prog based on $0 309a9ea25fSXin LIcase $0 in 319a9ea25fSXin LI *cmp) prog=cmp 329a9ea25fSXin LI ;; 339a9ea25fSXin LI *) prog=diff 349a9ea25fSXin LI ;; 359a9ea25fSXin LIesac 36*be07528cSXin LIUSAGE="usage: $0 [options] file1 [file2]" 37*be07528cSXin LI 38*be07528cSXin LIcheck_suffix() { 39*be07528cSXin LI case "$1" in 40*be07528cSXin LI *[._-][Zz]) 41*be07528cSXin LI setvar $2 "${1%??}" 42*be07528cSXin LI setvar $3 "gzip -cdqf" 43*be07528cSXin LI ;; 44*be07528cSXin LI *[._-]bz) 45*be07528cSXin LI setvar $2 "${1%???}" 46*be07528cSXin LI setvar $3 "bzip2 -cdqf" 47*be07528cSXin LI ;; 48*be07528cSXin LI *[._-]gz) 49*be07528cSXin LI setvar $2 "${1%???}" 50*be07528cSXin LI setvar $3 "gzip -cdqf" 51*be07528cSXin LI ;; 52*be07528cSXin LI *[._-]xz) 53*be07528cSXin LI setvar $2 "${1%???}" 54*be07528cSXin LI setvar $3 "xz -cdqf" 55*be07528cSXin LI ;; 56*be07528cSXin LI *[._-]bz2) 57*be07528cSXin LI setvar $2 "${1%????}" 58*be07528cSXin LI setvar $3 "bzip2 -cdqf" 59*be07528cSXin LI ;; 60*be07528cSXin LI *[._-]lzma) 61*be07528cSXin LI setvar $2 "${1%?????}" 62*be07528cSXin LI setvar $3 "xz -cdqf" 63*be07528cSXin LI ;; 64*be07528cSXin LI *.t[ag]z) 65*be07528cSXin LI setvar $2 "${1%??}"ar 66*be07528cSXin LI setvar $3 "gzip -cdqf" 67*be07528cSXin LI ;; 68*be07528cSXin LI *.tbz) 69*be07528cSXin LI setvar $2 "${1%??}"ar 70*be07528cSXin LI setvar $3 "bzip2 -cdqf" 71*be07528cSXin LI ;; 72*be07528cSXin LI *.tbz2) 73*be07528cSXin LI setvar $2 "${1%???}"ar 74*be07528cSXin LI setvar $3 "bzip2 -cdqf" 75*be07528cSXin LI ;; 76*be07528cSXin LI *.t[lx]z) 77*be07528cSXin LI setvar $2 "${1%??}"ar 78*be07528cSXin LI setvar $3 "xz -cdqf" 79*be07528cSXin LI ;; 80*be07528cSXin LI *) 81*be07528cSXin LI setvar $2 "$1" 82*be07528cSXin LI setvar $3 "" 83*be07528cSXin LI ;; 84*be07528cSXin LI esac 85*be07528cSXin LI} 86*be07528cSXin LI 879a9ea25fSXin LI 889a9ea25fSXin LI# Pull out any command line flags so we can pass them to diff/cmp 899a9ea25fSXin LI# XXX - assumes there is no optarg 909a9ea25fSXin LIflags= 919a9ea25fSXin LIwhile test $# -ne 0; do 929a9ea25fSXin LI case "$1" in 939a9ea25fSXin LI --) 949a9ea25fSXin LI shift 959a9ea25fSXin LI break 969a9ea25fSXin LI ;; 97*be07528cSXin LI -) 98*be07528cSXin LI break 99*be07528cSXin LI ;; 1009a9ea25fSXin LI -*) 1019a9ea25fSXin LI flags="$flags $1" 1029a9ea25fSXin LI shift 1039a9ea25fSXin LI ;; 1049a9ea25fSXin LI *) 1059a9ea25fSXin LI break 1069a9ea25fSXin LI ;; 1079a9ea25fSXin LI esac 1089a9ea25fSXin LIdone 1099a9ea25fSXin LI 1109a9ea25fSXin LIif [ $# -eq 1 ]; then 1119a9ea25fSXin LI # One file given, compare compressed to uncompressed 1129a9ea25fSXin LI files="$1" 113*be07528cSXin LI check_suffix "$1" files filt 114*be07528cSXin LI if [ -z "$filt" ]; then 115*be07528cSXin LI echo "z$prog: unknown suffix" 1>&2 1169a9ea25fSXin LI exit 1 117*be07528cSXin LI fi 118*be07528cSXin LI $filt -- "$1" | $prog $flags -- - "$files" 1199a9ea25fSXin LI status=$? 1209a9ea25fSXin LIelif [ $# -eq 2 ]; then 1219a9ea25fSXin LI # Two files given, compare the two uncompressing as needed 122*be07528cSXin LI check_suffix "$1" files filt 123*be07528cSXin LI check_suffix "$2" files2 filt2 124*be07528cSXin LI if [ -z "$filt" -a -z "$filt2" ]; then 125*be07528cSXin LI $prog $flags -- "$1" "$2" 126*be07528cSXin LI elif [ -z "$filt" -a -n "$filt2" -a "$1" != "-" ]; then 127*be07528cSXin LI $filt2 -- "$2" | $prog $flags -- "$1" - 128*be07528cSXin LI elif [ -n "$filt" -a -z "$filt2" -a "$2" != "-" ]; then 129*be07528cSXin LI $filt -- "$1" | $prog $flags -- - "$2" 130*be07528cSXin LI else 1319a9ea25fSXin LI tmp=`mktemp -t z$prog.XXXXXXXXXX` || exit 1 1329a9ea25fSXin LI trap "rm -f $tmp" 0 1 2 3 13 15 133*be07528cSXin LI ${filt2:-cat} -- "$2" > $tmp || exit $? 134*be07528cSXin LI ${filt:-cat} -- "$1" | $prog $flags -- - "$tmp" 1359a9ea25fSXin LI fi 1369a9ea25fSXin LI status=$? 1379a9ea25fSXin LIelse 1389a9ea25fSXin LI echo "$USAGE" 1>&2 1399a9ea25fSXin LI exit 1 1409a9ea25fSXin LIfi 1419a9ea25fSXin LI 1429a9ea25fSXin LIexit $status 143