Make "-D skip" option work with FIFO by opening file in non-blocking mode.

Reviewed by:	jhb
Tested by:	delphij
This commit is contained in:
David Xu 2013-01-22 03:23:14 +00:00
parent 3193ad883a
commit 87ec376216
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=245761

View file

@ -304,7 +304,7 @@ reset (int fd, char const *file, struct stats *stats)
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)))
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
@ -942,6 +942,7 @@ grepfile (char const *file, struct stats *stats)
int desc;
int count;
int status;
int flags;
if (! file)
{
@ -950,7 +951,7 @@ grepfile (char const *file, struct stats *stats)
}
else
{
while ((desc = open (file, O_RDONLY)) < 0 && errno == EINTR)
while ((desc = open (file, O_RDONLY | O_NONBLOCK)) < 0 && errno == EINTR)
continue;
if (desc < 0)
@ -990,6 +991,9 @@ grepfile (char const *file, struct stats *stats)
return 1;
}
flags = fcntl(desc, F_GETFL);
flags &= ~O_NONBLOCK;
fcntl(desc, F_SETFL, flags);
filename = file;
}