19a9ea25fSXin LI#!/bin/sh - 29a9ea25fSXin LI# 3be07528cSXin LI# $NetBSD: zdiff,v 1.5 2010/04/14 20:30:28 joerg Exp $ 4be07528cSXin LI# 59a9ea25fSXin LI# $OpenBSD: zdiff,v 1.2 2003/07/29 07:42:44 otto Exp $ 69a9ea25fSXin LI# 79a9ea25fSXin LI#- 89a9ea25fSXin LI# Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com> 9be07528cSXin LI# Copyright (c) 2010 Joerg Sonnenberger <joerg@NetBSD.org> 109a9ea25fSXin LI# 119a9ea25fSXin LI# Permission to use, copy, modify, and distribute this software for any 129a9ea25fSXin LI# purpose with or without fee is hereby granted, provided that the above 139a9ea25fSXin LI# copyright notice and this permission notice appear in all copies. 149a9ea25fSXin LI# 159a9ea25fSXin LI# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 169a9ea25fSXin LI# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 179a9ea25fSXin LI# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 189a9ea25fSXin LI# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 199a9ea25fSXin LI# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 209a9ea25fSXin LI# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 219a9ea25fSXin LI# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 229a9ea25fSXin LI# 239a9ea25fSXin LI# Sponsored in part by the Defense Advanced Research Projects 249a9ea25fSXin LI# Agency (DARPA) and Air Force Research Laboratory, Air Force 259a9ea25fSXin LI# Materiel Command, USAF, under agreement number F39502-99-1-0512. 269a9ea25fSXin LI# 279a9ea25fSXin LI# $FreeBSD$ 289a9ea25fSXin LI 299a9ea25fSXin LI# Set $prog based on $0 309a9ea25fSXin LIcase $0 in 319a9ea25fSXin LI *cmp) prog=cmp 329a9ea25fSXin LI ;; 339a9ea25fSXin LI *) prog=diff 349a9ea25fSXin LI ;; 359a9ea25fSXin LIesac 36be07528cSXin LIUSAGE="usage: $0 [options] file1 [file2]" 37be07528cSXin LI 38be07528cSXin LIcheck_suffix() { 39be07528cSXin LI case "$1" in 40be07528cSXin LI *[._-][Zz]) 41*5b7adeb1SKyle Evans eval "$2=\${1%??}" 42*5b7adeb1SKyle Evans eval "$3=\"gzip -cdqf\"" 43be07528cSXin LI ;; 44be07528cSXin LI *[._-]bz) 45*5b7adeb1SKyle Evans eval "$2=\${1%???}" 46*5b7adeb1SKyle Evans eval "$3=\"bzip2 -cdqf\"" 47be07528cSXin LI ;; 48be07528cSXin LI *[._-]gz) 49*5b7adeb1SKyle Evans eval "$2=\${1%???}" 50*5b7adeb1SKyle Evans eval "$3=\"gzip -cdqf\"" 51be07528cSXin LI ;; 52be07528cSXin LI *[._-]xz) 53*5b7adeb1SKyle Evans eval "$2=\${1%???}" 54*5b7adeb1SKyle Evans eval "$3=\"xz -cdqf\"" 55be07528cSXin LI ;; 56be07528cSXin LI *[._-]bz2) 57*5b7adeb1SKyle Evans eval "$2=\${1%????}" 58*5b7adeb1SKyle Evans eval "$3=\"bzip2 -cdqf\"" 59be07528cSXin LI ;; 60be07528cSXin LI *[._-]lzma) 61*5b7adeb1SKyle Evans eval "$2=\${1%?????}" 62*5b7adeb1SKyle Evans eval "$3=\"xz -cdqf\"" 63be07528cSXin LI ;; 64be07528cSXin LI *.t[ag]z) 65*5b7adeb1SKyle Evans eval "$2=\${1%??}ar" 66*5b7adeb1SKyle Evans eval "$3=\"gzip -cdqf\"" 67be07528cSXin LI ;; 68be07528cSXin LI *.tbz) 69*5b7adeb1SKyle Evans eval "$2=\${1%??}ar" 70*5b7adeb1SKyle Evans eval "$3=\"bzip2 -cdqf\"" 71be07528cSXin LI ;; 72be07528cSXin LI *.tbz2) 73*5b7adeb1SKyle Evans eval "$2=\${1%???}ar" 74*5b7adeb1SKyle Evans eval "$3=\"bzip2 -cdqf\"" 75be07528cSXin LI ;; 76be07528cSXin LI *.t[lx]z) 77*5b7adeb1SKyle Evans eval "$2=\${1%??}ar" 78*5b7adeb1SKyle Evans eval "$3=\"xz -cdqf\"" 79be07528cSXin LI ;; 80be07528cSXin LI *) 81*5b7adeb1SKyle Evans eval "$2=\$1" 82*5b7adeb1SKyle Evans eval "$3=\"\"" 83be07528cSXin LI ;; 84be07528cSXin LI esac 85be07528cSXin LI} 86be07528cSXin LI 879a9ea25fSXin LI 889a9ea25fSXin LI# Pull out any command line flags so we can pass them to diff/cmp 899a9ea25fSXin LI# XXX - assumes there is no optarg 909a9ea25fSXin LIflags= 919a9ea25fSXin LIwhile test $# -ne 0; do 929a9ea25fSXin LI case "$1" in 939a9ea25fSXin LI --) 949a9ea25fSXin LI shift 959a9ea25fSXin LI break 969a9ea25fSXin LI ;; 97be07528cSXin LI -) 98be07528cSXin LI break 99be07528cSXin LI ;; 1009a9ea25fSXin LI -*) 1019a9ea25fSXin LI flags="$flags $1" 1029a9ea25fSXin LI shift 1039a9ea25fSXin LI ;; 1049a9ea25fSXin LI *) 1059a9ea25fSXin LI break 1069a9ea25fSXin LI ;; 1079a9ea25fSXin LI esac 1089a9ea25fSXin LIdone 1099a9ea25fSXin LI 1109a9ea25fSXin LIif [ $# -eq 1 ]; then 1119a9ea25fSXin LI # One file given, compare compressed to uncompressed 1129a9ea25fSXin LI files="$1" 113be07528cSXin LI check_suffix "$1" files filt 114be07528cSXin LI if [ -z "$filt" ]; then 115be07528cSXin LI echo "z$prog: unknown suffix" 1>&2 1169a9ea25fSXin LI exit 1 117be07528cSXin LI fi 118be07528cSXin LI $filt -- "$1" | $prog $flags -- - "$files" 1199a9ea25fSXin LI status=$? 1209a9ea25fSXin LIelif [ $# -eq 2 ]; then 1219a9ea25fSXin LI # Two files given, compare the two uncompressing as needed 122be07528cSXin LI check_suffix "$1" files filt 123be07528cSXin LI check_suffix "$2" files2 filt2 124be07528cSXin LI if [ -z "$filt" -a -z "$filt2" ]; then 125be07528cSXin LI $prog $flags -- "$1" "$2" 126be07528cSXin LI elif [ -z "$filt" -a -n "$filt2" -a "$1" != "-" ]; then 127be07528cSXin LI $filt2 -- "$2" | $prog $flags -- "$1" - 128be07528cSXin LI elif [ -n "$filt" -a -z "$filt2" -a "$2" != "-" ]; then 129be07528cSXin LI $filt -- "$1" | $prog $flags -- - "$2" 130be07528cSXin LI else 1319a9ea25fSXin LI tmp=`mktemp -t z$prog.XXXXXXXXXX` || exit 1 1329a9ea25fSXin LI trap "rm -f $tmp" 0 1 2 3 13 15 133be07528cSXin LI ${filt2:-cat} -- "$2" > $tmp || exit $? 134be07528cSXin LI ${filt:-cat} -- "$1" | $prog $flags -- - "$tmp" 1359a9ea25fSXin LI fi 1369a9ea25fSXin LI status=$? 1379a9ea25fSXin LIelse 1389a9ea25fSXin LI echo "$USAGE" 1>&2 1399a9ea25fSXin LI exit 1 1409a9ea25fSXin LIfi 1419a9ea25fSXin LI 1429a9ea25fSXin LIexit $status 143