svn commit: r333351 - head/usr.bin/grep
Kyle Evans
kevans at FreeBSD.org
Tue May 8 03:53:48 UTC 2018
Author: kevans
Date: Tue May 8 03:53:46 2018
New Revision: 333351
URL: https://svnweb.freebsd.org/changeset/base/333351
Log:
bsdgrep: Allow "-" to be passed to -f to mean "standard input"
A version of this patch was originally sent to me by se@, matching behavior
from newer versions of GNU grep.
While there have been some differences of opinion on whether stdin should be
closed or not after depleting it in process of -f, I've opted to leave stdin
open and just let the later matching stuff fail and result in a no-match.
I'm not married to the current behavior- it was generally chosen since we
are adopting this in particular from GNU grep, and I would like to stay
consistent without a strong argument to the contrary. The current behavior
isn't technically wrong, it's just fairly unfriendly to the developer-user
of grep that may not realize their usage is trivially invalid.
Submitted by: se
Modified:
head/usr.bin/grep/grep.1
head/usr.bin/grep/grep.c
Modified: head/usr.bin/grep/grep.1
==============================================================================
--- head/usr.bin/grep/grep.1 Tue May 8 03:52:26 2018 (r333350)
+++ head/usr.bin/grep/grep.1 Tue May 8 03:53:46 2018 (r333351)
@@ -30,7 +30,7 @@
.\"
.\" @(#)grep.1 8.3 (Berkeley) 4/18/94
.\"
-.Dd April 25, 2018
+.Dd May 7, 2018
.Dt GREP 1
.Os
.Sh NAME
@@ -404,6 +404,13 @@ and block buffered otherwise.
.El
.Pp
If no file arguments are specified, the standard input is used.
+Additionally,
+.Dq -
+may be used in place of a file name, anywhere that a file name is accepted, to
+read from standard input.
+This includes both
+.Fl f
+and file arguments.
.Sh EXIT STATUS
The
.Nm grep
Modified: head/usr.bin/grep/grep.c
==============================================================================
--- head/usr.bin/grep/grep.c Tue May 8 03:52:26 2018 (r333350)
+++ head/usr.bin/grep/grep.c Tue May 8 03:53:46 2018 (r333351)
@@ -307,7 +307,9 @@ read_patterns(const char *fn)
size_t len;
ssize_t rlen;
- if ((f = fopen(fn, "r")) == NULL)
+ if (strcmp(fn, "-") == 0)
+ f = stdin;
+ else if ((f = fopen(fn, "r")) == NULL)
err(2, "%s", fn);
if ((fstat(fileno(f), &st) == -1) || (S_ISDIR(st.st_mode))) {
fclose(f);
@@ -324,7 +326,8 @@ read_patterns(const char *fn)
free(line);
if (ferror(f))
err(2, "%s", fn);
- fclose(f);
+ if (strcmp(fn, "-") != 0)
+ fclose(f);
}
static inline const char *
More information about the svn-src-all
mailing list