xref: /dflybsd-src/usr.bin/gzip/zdiff (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino#!/bin/sh -
286d7f5d3SJohn Marino#
386d7f5d3SJohn Marino# $NetBSD: zdiff,v 1.2 2003/12/28 12:43:43 wiz Exp $
486d7f5d3SJohn Marino# $DragonFly: src/usr.bin/gzip/zdiff,v 1.1 2004/10/26 11:19:31 joerg Exp $
586d7f5d3SJohn Marino# $OpenBSD: zdiff,v 1.2 2003/07/29 07:42:44 otto Exp $
686d7f5d3SJohn Marino#
786d7f5d3SJohn Marino# Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com>
886d7f5d3SJohn Marino#
986d7f5d3SJohn Marino# Permission to use, copy, modify, and distribute this software for any
1086d7f5d3SJohn Marino# purpose with or without fee is hereby granted, provided that the above
1186d7f5d3SJohn Marino# copyright notice and this permission notice appear in all copies.
1286d7f5d3SJohn Marino#
1386d7f5d3SJohn Marino# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1486d7f5d3SJohn Marino# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1586d7f5d3SJohn Marino# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1686d7f5d3SJohn Marino# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1786d7f5d3SJohn Marino# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1886d7f5d3SJohn Marino# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1986d7f5d3SJohn Marino# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2086d7f5d3SJohn Marino#
2186d7f5d3SJohn Marino# Sponsored in part by the Defense Advanced Research Projects
2286d7f5d3SJohn Marino# Agency (DARPA) and Air Force Research Laboratory, Air Force
2386d7f5d3SJohn Marino# Materiel Command, USAF, under agreement number F39502-99-1-0512.
2486d7f5d3SJohn Marino#
2586d7f5d3SJohn Marino
2686d7f5d3SJohn Marino# Set $prog based on $0
2786d7f5d3SJohn Marinocase $0 in
2886d7f5d3SJohn Marino	*cmp)	prog=cmp
2986d7f5d3SJohn Marino		;;
3086d7f5d3SJohn Marino	*)	prog=diff
3186d7f5d3SJohn Marino		;;
3286d7f5d3SJohn Marinoesac
3386d7f5d3SJohn MarinoUSAGE="usage: z$prog [options] file1 [file2]"
3486d7f5d3SJohn Marino
3586d7f5d3SJohn Marino# Pull out any command line flags so we can pass them to diff/cmp
3686d7f5d3SJohn Marino# XXX - assumes there is no optarg
3786d7f5d3SJohn Marinoflags=
3886d7f5d3SJohn Marinowhile test $# -ne 0; do
3986d7f5d3SJohn Marino	case "$1" in
4086d7f5d3SJohn Marino		--)
4186d7f5d3SJohn Marino			shift
4286d7f5d3SJohn Marino			break
4386d7f5d3SJohn Marino			;;
4486d7f5d3SJohn Marino		-*)
4586d7f5d3SJohn Marino			flags="$flags $1"
4686d7f5d3SJohn Marino			shift
4786d7f5d3SJohn Marino			;;
4886d7f5d3SJohn Marino		*)
4986d7f5d3SJohn Marino			break
5086d7f5d3SJohn Marino			;;
5186d7f5d3SJohn Marino	esac
5286d7f5d3SJohn Marinodone
5386d7f5d3SJohn Marino
5486d7f5d3SJohn Marinoif [ $# -eq 1 ]; then
5586d7f5d3SJohn Marino	# One file given, compare compressed to uncompressed
5686d7f5d3SJohn Marino	files="$1"
5786d7f5d3SJohn Marino	case "$1" in
5886d7f5d3SJohn Marino		*[._-][Zz])
5986d7f5d3SJohn Marino			files="${1%??}"
6086d7f5d3SJohn Marino			;;
6186d7f5d3SJohn Marino		*[._-]gz)
6286d7f5d3SJohn Marino			files="${1%???}"
6386d7f5d3SJohn Marino			;;
6486d7f5d3SJohn Marino		*.t[ag]z)
6586d7f5d3SJohn Marino			files="${1%??}"ar
6686d7f5d3SJohn Marino			;;
6786d7f5d3SJohn Marino		*)	echo "z$prog: unknown suffix" 1>&2
6886d7f5d3SJohn Marino			exit 1
6986d7f5d3SJohn Marino	esac
7086d7f5d3SJohn Marino	gzip -cdfq "$1" | $prog $flags - "$files"
7186d7f5d3SJohn Marino	status=$?
7286d7f5d3SJohn Marinoelif [ $# -eq 2 ]; then
7386d7f5d3SJohn Marino	# Two files given, compare the two uncompressing as needed
7486d7f5d3SJohn Marino	case "$1" in
7586d7f5d3SJohn Marino		*[._-][Zz]|*[._-]gz|*.t[ag]z)
7686d7f5d3SJohn Marino			files=-
7786d7f5d3SJohn Marino			filt="gzip -cdfq $1"
7886d7f5d3SJohn Marino			;;
7986d7f5d3SJohn Marino		*)
8086d7f5d3SJohn Marino			files="$1"
8186d7f5d3SJohn Marino			;;
8286d7f5d3SJohn Marino	esac
8386d7f5d3SJohn Marino	case "$2" in
8486d7f5d3SJohn Marino		*[._-][Zz]|*[._-]gz|*.t[ag]z)
8586d7f5d3SJohn Marino			if [ "$files" = "-" ]; then
8686d7f5d3SJohn Marino				tmp=`mktemp -t z$prog.XXXXXXXXXX` || exit 1
8786d7f5d3SJohn Marino				trap "rm -f $tmp" 0 1 2 3 13 15
8886d7f5d3SJohn Marino				gzip -cdfq "$2" > $tmp
8986d7f5d3SJohn Marino				files="$files $tmp"
9086d7f5d3SJohn Marino			else
9186d7f5d3SJohn Marino				files="$files -"
9286d7f5d3SJohn Marino				filt="gzip -cdfq $2"
9386d7f5d3SJohn Marino			fi
9486d7f5d3SJohn Marino			;;
9586d7f5d3SJohn Marino		*)
9686d7f5d3SJohn Marino			files="$files $2"
9786d7f5d3SJohn Marino			;;
9886d7f5d3SJohn Marino	esac
9986d7f5d3SJohn Marino	if [ -n "$filt" ]; then
10086d7f5d3SJohn Marino		$filt | $prog $flags $files
10186d7f5d3SJohn Marino	else
10286d7f5d3SJohn Marino		$prog $flags $files
10386d7f5d3SJohn Marino	fi
10486d7f5d3SJohn Marino	status=$?
10586d7f5d3SJohn Marinoelse
10686d7f5d3SJohn Marino	echo "$USAGE" 1>&2
10786d7f5d3SJohn Marino	exit 1
10886d7f5d3SJohn Marinofi
10986d7f5d3SJohn Marino
11086d7f5d3SJohn Marinoexit $status
111