xref: /dflybsd-src/usr.bin/gzip/zdiff (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
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