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