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