15ddb4360Smrg#!/bin/sh - 25ddb4360Smrg# 3*70729907Sjoerg# $NetBSD: zdiff,v 1.5 2010/04/14 20:30:28 joerg Exp $ 43a92ef57Swiz# 55ddb4360Smrg# $OpenBSD: zdiff,v 1.2 2003/07/29 07:42:44 otto Exp $ 65ddb4360Smrg# 75ddb4360Smrg# Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com> 868128a56Sjoerg# Copyright (c) 2010 Joerg Sonnenberger <joerg@NetBSD.org> 95ddb4360Smrg# 105ddb4360Smrg# Permission to use, copy, modify, and distribute this software for any 115ddb4360Smrg# purpose with or without fee is hereby granted, provided that the above 125ddb4360Smrg# copyright notice and this permission notice appear in all copies. 135ddb4360Smrg# 145ddb4360Smrg# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 155ddb4360Smrg# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 165ddb4360Smrg# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 175ddb4360Smrg# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 185ddb4360Smrg# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 195ddb4360Smrg# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 205ddb4360Smrg# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 215ddb4360Smrg# 225ddb4360Smrg# Sponsored in part by the Defense Advanced Research Projects 235ddb4360Smrg# Agency (DARPA) and Air Force Research Laboratory, Air Force 245ddb4360Smrg# Materiel Command, USAF, under agreement number F39502-99-1-0512. 255ddb4360Smrg# 265ddb4360Smrg 275ddb4360Smrg# Set $prog based on $0 285ddb4360Smrgcase $0 in 295ddb4360Smrg *cmp) prog=cmp 305ddb4360Smrg ;; 315ddb4360Smrg *) prog=diff 325ddb4360Smrg ;; 335ddb4360Smrgesac 3468128a56SjoergUSAGE="usage: $0 [options] file1 [file2]" 3568128a56Sjoerg 3668128a56Sjoergcheck_suffix() { 3768128a56Sjoerg case "$1" in 3868128a56Sjoerg *[._-][Zz]) 3968128a56Sjoerg setvar $2 "${1%??}" 4068128a56Sjoerg setvar $3 "gzip -cdqf" 4168128a56Sjoerg ;; 4268128a56Sjoerg *[._-]bz) 4368128a56Sjoerg setvar $2 "${1%???}" 4468128a56Sjoerg setvar $3 "bzip2 -cdqf" 4568128a56Sjoerg ;; 4668128a56Sjoerg *[._-]gz) 4768128a56Sjoerg setvar $2 "${1%???}" 4868128a56Sjoerg setvar $3 "gzip -cdqf" 4968128a56Sjoerg ;; 5068128a56Sjoerg *[._-]xz) 5168128a56Sjoerg setvar $2 "${1%???}" 5268128a56Sjoerg setvar $3 "xz -cdqf" 5368128a56Sjoerg ;; 5468128a56Sjoerg *[._-]bz2) 5568128a56Sjoerg setvar $2 "${1%????}" 5668128a56Sjoerg setvar $3 "bzip2 -cdqf" 5768128a56Sjoerg ;; 5868128a56Sjoerg *[._-]lzma) 5968128a56Sjoerg setvar $2 "${1%?????}" 6068128a56Sjoerg setvar $3 "xz -cdqf" 6168128a56Sjoerg ;; 6268128a56Sjoerg *.t[ag]z) 6368128a56Sjoerg setvar $2 "${1%??}"ar 6468128a56Sjoerg setvar $3 "gzip -cdqf" 6568128a56Sjoerg ;; 6668128a56Sjoerg *.tbz) 6768128a56Sjoerg setvar $2 "${1%??}"ar 6868128a56Sjoerg setvar $3 "bzip2 -cdqf" 6968128a56Sjoerg ;; 7068128a56Sjoerg *.tbz2) 7168128a56Sjoerg setvar $2 "${1%???}"ar 7268128a56Sjoerg setvar $3 "bzip2 -cdqf" 7368128a56Sjoerg ;; 7468128a56Sjoerg *.t[lx]z) 7568128a56Sjoerg setvar $2 "${1%??}"ar 7668128a56Sjoerg setvar $3 "xz -cdqf" 7768128a56Sjoerg ;; 7868128a56Sjoerg *) 7968128a56Sjoerg setvar $2 "$1" 8068128a56Sjoerg setvar $3 "" 8168128a56Sjoerg ;; 8268128a56Sjoerg esac 8368128a56Sjoerg} 8468128a56Sjoerg 855ddb4360Smrg 865ddb4360Smrg# Pull out any command line flags so we can pass them to diff/cmp 875ddb4360Smrg# XXX - assumes there is no optarg 885ddb4360Smrgflags= 895ddb4360Smrgwhile test $# -ne 0; do 905ddb4360Smrg case "$1" in 915ddb4360Smrg --) 925ddb4360Smrg shift 935ddb4360Smrg break 945ddb4360Smrg ;; 9568128a56Sjoerg -) 9668128a56Sjoerg break 9768128a56Sjoerg ;; 985ddb4360Smrg -*) 995ddb4360Smrg flags="$flags $1" 1005ddb4360Smrg shift 1015ddb4360Smrg ;; 1025ddb4360Smrg *) 1035ddb4360Smrg break 1045ddb4360Smrg ;; 1055ddb4360Smrg esac 1065ddb4360Smrgdone 1075ddb4360Smrg 1085ddb4360Smrgif [ $# -eq 1 ]; then 1095ddb4360Smrg # One file given, compare compressed to uncompressed 1105ddb4360Smrg files="$1" 11168128a56Sjoerg check_suffix "$1" files filt 11268128a56Sjoerg if [ -z "$filt" ]; then 11368128a56Sjoerg echo "z$prog: unknown suffix" 1>&2 1145ddb4360Smrg exit 1 11568128a56Sjoerg fi 116*70729907Sjoerg $filt -- "$1" | $prog $flags -- - "$files" 1175ddb4360Smrg status=$? 1185ddb4360Smrgelif [ $# -eq 2 ]; then 1195ddb4360Smrg # Two files given, compare the two uncompressing as needed 12068128a56Sjoerg check_suffix "$1" files filt 12168128a56Sjoerg check_suffix "$2" files2 filt2 12268128a56Sjoerg if [ -z "$filt" -a -z "$filt2" ]; then 123*70729907Sjoerg $prog $flags -- "$1" "$2" 12468128a56Sjoerg elif [ -z "$filt" -a -n "$filt2" -a "$1" != "-" ]; then 125*70729907Sjoerg $filt2 -- "$2" | $prog $flags -- "$1" - 12668128a56Sjoerg elif [ -n "$filt" -a -z "$filt2" -a "$2" != "-" ]; then 127*70729907Sjoerg $filt -- "$1" | $prog $flags -- - "$2" 12868128a56Sjoerg else 1295ddb4360Smrg tmp=`mktemp -t z$prog.XXXXXXXXXX` || exit 1 1305ddb4360Smrg trap "rm -f $tmp" 0 1 2 3 13 15 131*70729907Sjoerg ${filt2:-cat} -- "$2" > $tmp || exit $? 132*70729907Sjoerg ${filt:-cat} -- "$1" | $prog $flags -- - "$tmp" 1335ddb4360Smrg fi 1345ddb4360Smrg status=$? 1355ddb4360Smrgelse 1365ddb4360Smrg echo "$USAGE" 1>&2 1375ddb4360Smrg exit 1 1385ddb4360Smrgfi 1395ddb4360Smrg 1405ddb4360Smrgexit $status 141