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