svn commit: r245761 - head/gnu/usr.bin/grep
David Xu
davidxu at FreeBSD.org
Tue Jan 22 03:23:15 UTC 2013
Author: davidxu
Date: Tue Jan 22 03:23:14 2013
New Revision: 245761
URL: http://svnweb.freebsd.org/changeset/base/245761
Log:
Make "-D skip" option work with FIFO by opening file in non-blocking mode.
Reviewed by: jhb
Tested by: delphij
Modified:
head/gnu/usr.bin/grep/grep.c
Modified: head/gnu/usr.bin/grep/grep.c
==============================================================================
--- head/gnu/usr.bin/grep/grep.c Tue Jan 22 02:57:53 2013 (r245760)
+++ head/gnu/usr.bin/grep/grep.c Tue Jan 22 03:23:14 2013 (r245761)
@@ -304,7 +304,7 @@ reset (int fd, char const *file, struct
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
int desc;
int count;
int status;
+ int flags;
if (! file)
{
@@ -950,7 +951,7 @@ grepfile (char const *file, struct 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
return 1;
}
+ flags = fcntl(desc, F_GETFL);
+ flags &= ~O_NONBLOCK;
+ fcntl(desc, F_SETFL, flags);
filename = file;
}
More information about the svn-src-all
mailing list