Tizen 2.0 Release
[pkgs/o/oma-ds-service.git] / bin / zdiff
1 #!/bin/bash
2 # sh is buggy on RS/6000 AIX 3.2. Replace above line with #!/bin/ksh
3
4 # Copyright (C) 1998, 2002, 2006, 2007 Free Software Foundation
5 # Copyright (C) 1993 Jean-loup Gailly
6
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
11
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
16
17 # You should have received a copy of the GNU General Public License along
18 # with this program; if not, write to the Free Software Foundation, Inc.,
19 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
21 PATH=${GZIP_BINDIR-'/bin'}:$PATH
22
23 case $1 in
24   --__cmp) shift
25         prog=cmp;  cmp='${CMP-cmp}'  ;;
26   *)    prog=diff; cmp='${DIFF-diff}';;
27 esac
28
29 version="z$prog (gzip) 1.3.12
30 Copyright (C) 2007 Free Software Foundation, Inc.
31 This is free software.  You may redistribute copies of it under the terms of
32 the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
33 There is NO WARRANTY, to the extent permitted by law.
34
35 Written by Jean-loup Gailly."
36
37 usage="Usage: $0 [OPTION]... FILE1 [FILE2]
38 Compare FILE1 to FILE2, using their uncompressed contents if they are
39 compressed.  If FILE2 is omitted, compare FILE1 to the uncompressed
40 contents of FILE1.gz.  Do comparisons like '$prog' does.
41
42 OPTIONs are the same as for '$prog'.
43
44 Report bugs to <bug-gzip@gnu.org>."
45
46 # sed script to escape all ' for the shell, and then (to handle trailing
47 # newlines correctly) turn trailing X on last line into '.
48 escape='
49   s/'\''/'\''\\'\'''\''/g
50   $s/X$/'\''/
51 '
52
53 while :; do
54   case $1 in
55   --h*) printf '%s\n' "$usage" || exit 2; exit;;
56   --v*) echo "$version" || exit 2; exit;;
57   --) shift; break;;
58   -*\'*) cmp="$cmp '"`printf '%sX\n' "$1" | sed "$escape"`;;
59   -?*) cmp="$cmp '$1'";;
60   *) break;;
61   esac
62   shift
63 done
64 cmp="$cmp --"
65
66 for file
67 do
68   test "X$file" = X- || <"$file" || exit 2
69 done
70
71 gzip_status=0
72 exec 3>&1
73
74 if test $# -eq 1; then
75   case $1 in
76   *[-.]gz* | *[-.][zZ] | *.t[ga]z)
77     FILE=`expr "X$1" : 'X\(.*\)[-.][zZtga]*$'`
78     gzip_status=$(
79       exec 4>&1
80       (gzip -cd -- "$1" 4>&-; echo $? >&4) 3>&- | eval "$cmp" - '"$FILE"' >&3
81     );;
82   *)
83     echo >&2 "$0: $1: unknown compressed file extension"
84     exit 2;;
85   esac
86 elif test $# -eq 2; then
87         case "$1" in
88         *[-.]gz* | *[-.][zZ] | *.t[ga]z | -)
89                 case "$2" in
90                 *[-.]gz* | *[-.][zZ] | *.t[ga]z | -)
91                     if test "$1$2" = --; then
92                         gzip_status=$(
93                           exec 4>&1
94                           (gzip -cdfq - 4>&-; echo $? >&4) 3>&- |
95                             eval "$cmp" - - >&3
96                         )
97                     elif
98                         # Reject Solaris 8's buggy /bin/bash 2.03.
99                         echo X |
100                          (echo X | eval "$cmp" /dev/fd/5 - >/dev/null 2>&1) \
101                                 5<&0
102                     then
103                         gzip_status=$(
104                           exec 4>&1
105                           (gzip -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- |
106                             ( (gzip -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- </dev/null |
107                                eval "$cmp" /dev/fd/5 - >&3) 5<&0
108                         )
109                         case $gzip_status in
110                           *[1-9]*) gzip_status=1;;
111                           *) gzip_status=0;;
112                         esac
113                     else
114                         F=`expr "/$2" : '.*/\(.*\)[-.][zZtga]*$'` || F=$prog
115                         tmp=
116                         trap '
117                           test -n "$tmp" && rm -f "$tmp"
118                           (exit 2); exit 2
119                         ' HUP INT PIPE TERM 0
120                         if type mktemp >/dev/null 2>&1; then
121                           tmp=`mktemp -t -- "$F.XXXXXX"` || exit 2
122                         else
123                           set -C
124                           tmp=${TMPDIR-/tmp}/$F.$$
125                         fi
126                         gzip -cdfq -- "$2" > "$tmp" || exit 2
127                         gzip_status=$(
128                           exec 4>&1
129                           (gzip -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- |
130                             eval "$cmp" - '"$tmp"' >&3
131                         )
132                         cmp_status=$?
133                         rm -f "$tmp" || gzip_status=$?
134                         trap - HUP INT PIPE TERM 0
135                         (exit $cmp_status)
136                     fi;;
137                 *)
138                     gzip_status=$(
139                       exec 4>&1
140                       (gzip -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- |
141                         eval "$cmp" - '"$2"' >&3
142                     );;
143                 esac;;
144         *)      case "$2" in
145                 *[-.]gz* | *[-.][zZ] | *.t[ga]z | -)
146                         gzip_status=$(
147                           exec 4>&1
148                           (gzip -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- |
149                             eval "$cmp" '"$1"' - >&3
150                         );;
151                 *)      eval "$cmp" '"$1"' '"$2"';;
152                 esac;;
153         esac
154 else
155         echo >&2 "$0: invalid number of operands; try \`$0 --help' for help"
156         exit 2
157 fi
158
159 cmp_status=$?
160 test "$gzip_status" -eq 0 || exit 2
161 exit $cmp_status