--- grep-2.5.1a/src/grep.c 2004-11-12 10:54:00.000000000 +0100 +++ grep-2.5.1b/src/grep.c 2004-11-13 23:01:51.010585304 +0100 @@ -255,19 +255,6 @@ 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) @@ -895,6 +882,19 @@ } 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;