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 289a9ea25fSXin LI# Set $prog based on $0 299a9ea25fSXin LIcase $0 in 309a9ea25fSXin LI *cmp) prog=cmp 319a9ea25fSXin LI ;; 329a9ea25fSXin LI *) prog=diff 339a9ea25fSXin LI ;; 349a9ea25fSXin LIesac 35be07528cSXin LIUSAGE="usage: $0 [options] file1 [file2]" 36be07528cSXin LI 37be07528cSXin LIcheck_suffix() { 38be07528cSXin LI case "$1" in 39be07528cSXin LI *[._-][Zz]) 40*5b7adeb1SKyle Evans eval "$2=\${1%??}" 41*5b7adeb1SKyle Evans eval "$3=\"gzip -cdqf\"" 42be07528cSXin LI ;; 43be07528cSXin LI *[._-]bz) 44*5b7adeb1SKyle Evans eval "$2=\${1%???}" 45*5b7adeb1SKyle Evans eval "$3=\"bzip2 -cdqf\"" 46be07528cSXin LI ;; 47be07528cSXin LI *[._-]gz) 48*5b7adeb1SKyle Evans eval "$2=\${1%???}" 49*5b7adeb1SKyle Evans eval "$3=\"gzip -cdqf\"" 50be07528cSXin LI ;; 51be07528cSXin LI *[._-]xz) 52*5b7adeb1SKyle Evans eval "$2=\${1%???}" 53*5b7adeb1SKyle Evans eval "$3=\"xz -cdqf\"" 54be07528cSXin LI ;; 55be07528cSXin LI *[._-]bz2) 56*5b7adeb1SKyle Evans eval "$2=\${1%????}" 57*5b7adeb1SKyle Evans eval "$3=\"bzip2 -cdqf\"" 58be07528cSXin LI ;; 59be07528cSXin LI *[._-]lzma) 60*5b7adeb1SKyle Evans eval "$2=\${1%?????}" 61*5b7adeb1SKyle Evans eval "$3=\"xz -cdqf\"" 62be07528cSXin LI ;; 63be07528cSXin LI *.t[ag]z) 64*5b7adeb1SKyle Evans eval "$2=\${1%??}ar" 65*5b7adeb1SKyle Evans eval "$3=\"gzip -cdqf\"" 66be07528cSXin LI ;; 67be07528cSXin LI *.tbz) 68*5b7adeb1SKyle Evans eval "$2=\${1%??}ar" 69*5b7adeb1SKyle Evans eval "$3=\"bzip2 -cdqf\"" 70be07528cSXin LI ;; 71be07528cSXin LI *.tbz2) 72*5b7adeb1SKyle Evans eval "$2=\${1%???}ar" 73*5b7adeb1SKyle Evans eval "$3=\"bzip2 -cdqf\"" 74be07528cSXin LI ;; 75be07528cSXin LI *.t[lx]z) 76*5b7adeb1SKyle Evans eval "$2=\${1%??}ar" 77*5b7adeb1SKyle Evans eval "$3=\"xz -cdqf\"" 78be07528cSXin LI ;; 79be07528cSXin LI *) 80*5b7adeb1SKyle Evans eval "$2=\$1" 81*5b7adeb1SKyle Evans eval "$3=\"\"" 82be07528cSXin LI ;; 83be07528cSXin LI esac 84be07528cSXin LI} 85be07528cSXin LI 869a9ea25fSXin LI 879a9ea25fSXin LI# Pull out any command line flags so we can pass them to diff/cmp 889a9ea25fSXin LI# XXX - assumes there is no optarg 899a9ea25fSXin LIflags= 909a9ea25fSXin LIwhile test $# -ne 0; do 919a9ea25fSXin LI case "$1" in 929a9ea25fSXin LI --) 939a9ea25fSXin LI shift 949a9ea25fSXin LI break 959a9ea25fSXin LI ;; 96be07528cSXin LI -) 97be07528cSXin LI break 98be07528cSXin LI ;; 999a9ea25fSXin LI -*) 1009a9ea25fSXin LI flags="$flags $1" 1019a9ea25fSXin LI shift 1029a9ea25fSXin LI ;; 1039a9ea25fSXin LI *) 1049a9ea25fSXin LI break 1059a9ea25fSXin LI ;; 1069a9ea25fSXin LI esac 1079a9ea25fSXin LIdone 1089a9ea25fSXin LI 1099a9ea25fSXin LIif [ $# -eq 1 ]; then 1109a9ea25fSXin LI # One file given, compare compressed to uncompressed 1119a9ea25fSXin LI files="$1" 112be07528cSXin LI check_suffix "$1" files filt 113be07528cSXin LI if [ -z "$filt" ]; then 114be07528cSXin LI echo "z$prog: unknown suffix" 1>&2 1159a9ea25fSXin LI exit 1 116be07528cSXin LI fi 117be07528cSXin LI $filt -- "$1" | $prog $flags -- - "$files" 1189a9ea25fSXin LI status=$? 1199a9ea25fSXin LIelif [ $# -eq 2 ]; then 1209a9ea25fSXin LI # Two files given, compare the two uncompressing as needed 121be07528cSXin LI check_suffix "$1" files filt 122be07528cSXin LI check_suffix "$2" files2 filt2 123be07528cSXin LI if [ -z "$filt" -a -z "$filt2" ]; then 124be07528cSXin LI $prog $flags -- "$1" "$2" 125be07528cSXin LI elif [ -z "$filt" -a -n "$filt2" -a "$1" != "-" ]; then 126be07528cSXin LI $filt2 -- "$2" | $prog $flags -- "$1" - 127be07528cSXin LI elif [ -n "$filt" -a -z "$filt2" -a "$2" != "-" ]; then 128be07528cSXin LI $filt -- "$1" | $prog $flags -- - "$2" 129be07528cSXin LI else 1309a9ea25fSXin LI tmp=`mktemp -t z$prog.XXXXXXXXXX` || exit 1 1319a9ea25fSXin LI trap "rm -f $tmp" 0 1 2 3 13 15 132be07528cSXin LI ${filt2:-cat} -- "$2" > $tmp || exit $? 133be07528cSXin LI ${filt:-cat} -- "$1" | $prog $flags -- - "$tmp" 1349a9ea25fSXin LI fi 1359a9ea25fSXin LI status=$? 1369a9ea25fSXin LIelse 1379a9ea25fSXin LI echo "$USAGE" 1>&2 1389a9ea25fSXin LI exit 1 1399a9ea25fSXin LIfi 1409a9ea25fSXin LI 1419a9ea25fSXin LIexit $status 142