diff -dpru diffutils-2.8.7~/src/diff.c diffutils-2.8.7/src/diff.c
--- diffutils-2.8.7~/src/diff.c	2006-01-12 21:35:17.615919000 +0100
+++ diffutils-2.8.7/src/diff.c	2006-01-12 22:31:30.095919000 +0100
@@ -80,6 +80,8 @@ static bool binary;
 enum { binary = true };
 #endif
 
+static bool fast_compare = 0;
+
 /* When comparing directories, if a file appears only in one
    directory, treat it as present but empty in the other (-N).
    Then `patch' would create the file with appropriate contents.  */
@@ -167,7 +169,8 @@ enum
   UNCHANGED_GROUP_FORMAT_OPTION,
   OLD_GROUP_FORMAT_OPTION,
   NEW_GROUP_FORMAT_OPTION,
-  CHANGED_GROUP_FORMAT_OPTION
+  CHANGED_GROUP_FORMAT_OPTION,
+  FAST_COMPARE_OPTION,
 };
 
 static char const group_format_option[][sizeof "--unchanged-group-format"] =
@@ -195,6 +198,7 @@ static struct option const longopts[] =
   {"exclude", 1, 0, 'x'},
   {"exclude-from", 1, 0, 'X'},
   {"expand-tabs", 0, 0, 't'},
+  {"fast", 0, 0, FAST_COMPARE_OPTION},
   {"forward-ed", 0, 0, 'f'},
   {"from-file", 1, 0, FROM_FILE_OPTION},
   {"help", 0, 0, HELP_OPTION},
@@ -607,6 +611,10 @@ main (int argc, char **argv)
 	  specify_value (&group_format[c], optarg, group_format_option[c]);
 	  break;
 
+        case FAST_COMPARE_OPTION:
+            fast_compare = 1;
+            break;
+
 	default:
 	  try_help (0, 0);
 	}
@@ -1205,9 +1213,12 @@ compare_files (struct comparison const *
   else if ((same_files
 	    = (cmp.file[0].desc != NONEXISTENT
 	       && cmp.file[1].desc != NONEXISTENT
-	       && 0 < same_file (&cmp.file[0].stat, &cmp.file[1].stat)
-	       && same_file_attributes (&cmp.file[0].stat,
-					&cmp.file[1].stat)))
+	       && ((fast_compare && S_ISREG(cmp.file[0].stat.st_mode))
+                  ? same_file_attributes_fast(&cmp.file[0].stat, &cmp.file[1].stat)
+                  : (0 < same_file(&cmp.file[0].stat, &cmp.file[1].stat) &&
+                    same_file_attributes(&cmp.file[0].stat, &cmp.file[1].stat))
+                  )
+              ))
 	   && no_diff_means_no_output)
     {
       /* The two named files are actually the same physical file.
diff -dpru diffutils-2.8.7~/src/system.h diffutils-2.8.7/src/system.h
--- diffutils-2.8.7~/src/system.h	2004-04-12 09:44:35.000000000 +0200
+++ diffutils-2.8.7/src/system.h	2006-01-12 22:03:04.455919000 +0100
@@ -324,3 +324,13 @@ verify (lin_is_printable_as_long_int, si
     && (s)->st_mtime == (t)->st_mtime \
     && (s)->st_ctime == (t)->st_ctime)
 #endif
+
+#ifndef same_file_attributes_fast
+# define same_file_attributes_fast(s, t) \
+   ((s)->st_mode == (t)->st_mode \
+    && (s)->st_nlink == (t)->st_nlink \
+    && (s)->st_uid == (t)->st_uid \
+    && (s)->st_gid == (t)->st_gid \
+    && (s)->st_size == (t)->st_size \
+    && (s)->st_mtime == (t)->st_mtime)
+#endif
