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