--- /dev/null
+diff --git a/zdiff.in b/zdiff.in
+index 9d3b4ae..506a888 100644
+--- a/zdiff.in
++++ b/zdiff.in
+@@ -76,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
+@@ -88,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
+@@ -118,6 +127,9 @@ elif test $# -eq 2; then
+ (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"
+@@ -147,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>&- |