35b335f
--- grep-2.5.1a/src/grep.c.skip	2006-05-31 09:26:58.000000000 +0100
35b335f
+++ grep-2.5.1a/src/grep.c	2006-05-31 09:28:24.000000000 +0100
35b335f
@@ -261,19 +261,6 @@
35b335f
   bufbeg[-1] = eolbyte;
35b335f
   bufdesc = fd;
35b335f
 
35b335f
-  if (fstat (fd, &stats->stat) != 0)
35b335f
-    {
35b335f
-      error (0, errno, "fstat");
35b335f
-      return 0;
35b335f
-    }
35b335f
-  if (directories == SKIP_DIRECTORIES && S_ISDIR (stats->stat.st_mode))
35b335f
-    return 0;
35b335f
-#ifndef DJGPP
35b335f
-  if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode) || S_ISSOCK(stats->stat.st_mode)))
35b335f
-#else
35b335f
-  if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode)))
35b335f
-#endif
35b335f
-    return 0;
35b335f
   if (S_ISREG (stats->stat.st_mode))
35b335f
     {
35b335f
       if (file)
35b335f
@@ -875,6 +862,19 @@
35b335f
     }
35b335f
   else
35b335f
     {
35b335f
+      if (stat (file, &stats->stat) != 0)
35b335f
+        {
35b335f
+          suppressible_error (file, errno);
35b335f
+          return 1;
35b335f
+        }
35b335f
+      if (directories == SKIP_DIRECTORIES && S_ISDIR (stats->stat.st_mode))
35b335f
+        return 1;
35b335f
+#ifndef DJGPP
35b335f
+      if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode) || S_ISSOCK(stats->stat.st_mode) || S_ISFIFO(stats->stat.st_mode)))
35b335f
+#else
35b335f
+      if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode)))
35b335f
+#endif
35b335f
+        return 1;
35b335f
       while ((desc = open (file, O_RDONLY)) < 0 && errno == EINTR)
35b335f
 	continue;
35b335f