summaryrefslogtreecommitdiff
blob: aff800c32d85ca1c196be84d8296ecff7d4dc5f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
http://bugs.gentoo.org/113640

2004-11-20  Benno Schulenberg  <benno@nietvergeten.nl>  (tiny change)

	* src/grep.c (reset): Move the stat check ...
	(grepfile): ... here, and also check for a fifo.

Index: src/grep.c
===================================================================
RCS file: /cvsroot/grep/grep/src/grep.c,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -p -r1.83 -r1.84
--- src/grep.c	20 Nov 2004 16:15:57 -0000	1.83
+++ src/grep.c	20 Nov 2004 16:20:38 -0000	1.84
@@ -255,19 +255,6 @@ reset (int fd, char const *file, struct 
   bufbeg[-1] = eolbyte;
   bufdesc = fd;
 
-  if (fstat (fd, &stats->stat) != 0)
-    {
-      error (0, errno, "fstat");
-      return 0;
-    }
-  if (directories == SKIP_DIRECTORIES && S_ISDIR (stats->stat.st_mode))
-    return 0;
-#ifndef DJGPP
-  if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode) || S_ISSOCK(stats->stat.st_mode)))
-#else
-  if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode)))
-#endif
-    return 0;
   if (S_ISREG (stats->stat.st_mode))
     {
       if (file)
@@ -928,6 +915,19 @@ grepfile (char const *file, struct stats
     }
   else
     {
+      if (stat (file, &stats->stat) != 0)
+        {
+          suppressible_error (file, errno);
+          return 1;
+        }
+      if (directories == SKIP_DIRECTORIES && S_ISDIR (stats->stat.st_mode))
+        return 1;
+#ifndef DJGPP
+      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)))
+#else
+      if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode)))
+#endif
+        return 1;
       while ((desc = open (file, O_RDONLY)) < 0 && errno == EINTR)
 	continue;