patch to improve behavior of zdiff when file is compressed without extension
[debian/gzip] / zdiff.in
index fda3259fe1a808d18d40e00e5337fc6b2aeebe55..506a888ef2d78390d9d6e8eec497b63c37d673a5 100644 (file)
--- a/zdiff.in
+++ b/zdiff.in
@@ -1,12 +1,12 @@
 #!/bin/sh
 # sh is buggy on RS/6000 AIX 3.2. Replace above line with #!/bin/ksh
 
-# Copyright (C) 1998, 2002, 2006, 2007 Free Software Foundation
+# Copyright (C) 1998, 2002, 2006, 2007, 2009 Free Software Foundation
 # Copyright (C) 1993 Jean-loup Gailly
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 
 # This program is distributed in the hope that it will be useful,
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-PATH=BINDIR:$PATH
+bindir=@bindir@
+case $1 in
+--__bindir) bindir=${2?}; shift; shift;;
+esac
+PATH=$bindir:$PATH
 
 case $1 in
   --__cmp) shift
@@ -27,7 +31,7 @@ case $1 in
 esac
 
 version="z$prog (gzip) @VERSION@
-Copyright (C) 2007 Free Software Foundation, Inc.
+Copyright (C) 2007, 2009-2010 Free Software Foundation, Inc.
 This is free software.  You may redistribute copies of it under the terms of
 the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
 There is NO WARRANTY, to the extent permitted by law.
@@ -72,9 +76,15 @@ gzip_status=0
 exec 3>&1
 
 if test $# -eq 1; then
-  case $1 in
-  *[-.]gz* | *[-.][zZ] | *.t[ga]z)
+  type_file=$(file -b --mime-type "$1")
+
+  case $type_file in
+  application/x-gzip | application/x-compress)
     FILE=`expr "X$1" : 'X\(.*\)[-.][zZtga]*$'`
+    if test "$FILE" == ""; then
+        FILE="$1"
+    fi;
+    
     gzip_status=$(
       exec 4>&1
       (gzip -cd -- "$1" 4>&-; echo $? >&4) 3>&- | eval "$cmp" - '"$FILE"' >&3
@@ -84,10 +94,13 @@ if test $# -eq 1; then
     exit 2;;
   esac
 elif test $# -eq 2; then
-       case "$1" in
-       *[-.]gz* | *[-.][zZ] | *.t[ga]z | -)
-                case "$2" in
-               *[-.]gz* | *[-.][zZ] | *.t[ga]z | -)
+       type_file1=$(file -b --mime-type "$1")
+       type_file2=$(file -b --mime-type "$2")
+       
+       case "$type_file1" in
+       application/x-gzip | application/x-compress)
+                case "$type_file2" in
+               application/x-gzip | application/x-compress)
                    if test "$1$2" = --; then
                        gzip_status=$(
                          exec 4>&1
@@ -104,14 +117,19 @@ elif test $# -eq 2; then
                          exec 4>&1
                          (gzip -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- |
                            ( (gzip -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- </dev/null |
-                              eval "$cmp" /dev/fd/5 -) 5<&0
+                              eval "$cmp" /dev/fd/5 - >&3) 5<&0
                        )
+                       cmp_status=$?
                        case $gzip_status in
                          *[1-9]*) gzip_status=1;;
                          *) gzip_status=0;;
                        esac
+                       (exit $cmp_status)
                    else
                        F=`expr "/$2" : '.*/\(.*\)[-.][zZtga]*$'` || F=$prog
+                       if test "$F" == ""; then
+                           F="$2"
+                       fi;
                        tmp=
                        trap '
                          test -n "$tmp" && rm -f "$tmp"
@@ -141,8 +159,8 @@ elif test $# -eq 2; then
                        eval "$cmp" - '"$2"' >&3
                    );;
                 esac;;
-        *)      case "$2" in
-               *[-.]gz* | *[-.][zZ] | *.t[ga]z | -)
+        *)      case "$type_file2" in
+               application/x-gzip | application/x-compress)
                        gzip_status=$(
                          exec 4>&1
                          (gzip -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- |