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