svn commit: r362687 - in stable/12/usr.bin/sed: . tests

Mateusz Piotrowski 0mp at FreeBSD.org
Sat Jun 27 14:27:38 UTC 2020


Author: 0mp (doc,ports committer)
Date: Sat Jun 27 14:27:37 2020
New Revision: 362687
URL: https://svnweb.freebsd.org/changeset/base/362687

Log:
  MFC 362017, 362039, 362071:
  
  Read commands from stdin when -f - is passed to sed(1)
  
  This patch teaches sed to interpret a "-" in a special way when given
  as an argument to the -f flag.
  
  This behavior is also present in GNU sed.
  
  PR:		244872
  Tested by:	antoine (exp-run)
  Reviewed by:	pfg, tobik (older version)
  Approved by:	pfg (src)
  Relnotes:	yes
  Differential Revision:	https://reviews.freebsd.org/D24079
  
  Remove duplicate lines from sed tests
  
  Reported by:	yuripv
  Approved by:	pfg (src)
  
  Remove some more duplicate test cases I accidentally committed
  
  Reported by:	markj, yuripv

Modified:
  stable/12/usr.bin/sed/main.c
  stable/12/usr.bin/sed/sed.1
  stable/12/usr.bin/sed/tests/sed2_test.sh
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/usr.bin/sed/main.c
==============================================================================
--- stable/12/usr.bin/sed/main.c	Sat Jun 27 14:14:00 2020	(r362686)
+++ stable/12/usr.bin/sed/main.c	Sat Jun 27 14:27:37 2020	(r362687)
@@ -126,12 +126,13 @@ static void usage(void);
 int
 main(int argc, char *argv[])
 {
-	int c, fflag;
+	int c, fflag, fflagstdin;
 	char *temp_arg;
 
 	(void) setlocale(LC_ALL, "");
 
 	fflag = 0;
+	fflagstdin = 0;
 	inplace = NULL;
 
 	while ((c = getopt(argc, argv, "EI:ae:f:i:lnru")) != -1)
@@ -157,6 +158,8 @@ main(int argc, char *argv[])
 			break;
 		case 'f':
 			fflag = 1;
+			if (strcmp(optarg, "-") == 0)
+				fflagstdin = 1;
 			add_compunit(CU_FILE, optarg);
 			break;
 		case 'i':
@@ -193,6 +196,8 @@ main(int argc, char *argv[])
 	if (*argv)
 		for (; *argv; argv++)
 			add_file(*argv);
+	else if (fflagstdin)
+		exit(rval);
 	else
 		add_file(NULL);
 	process();
@@ -236,9 +241,14 @@ again:
 		linenum = 0;
 		switch (script->type) {
 		case CU_FILE:
-			if ((f = fopen(script->s, "r")) == NULL)
-				err(1, "%s", script->s);
-			fname = script->s;
+			if (strcmp(script->s, "-") == 0) {
+				f = stdin;
+				fname = "stdin";
+			} else {
+				if ((f = fopen(script->s, "r")) == NULL)
+				        err(1, "%s", script->s);
+				fname = script->s;
+			}
 			state = ST_FILE;
 			goto again;
 		case CU_STRING:

Modified: stable/12/usr.bin/sed/sed.1
==============================================================================
--- stable/12/usr.bin/sed/sed.1	Sat Jun 27 14:14:00 2020	(r362686)
+++ stable/12/usr.bin/sed/sed.1	Sat Jun 27 14:27:37 2020	(r362687)
@@ -31,7 +31,7 @@
 .\"	@(#)sed.1	8.2 (Berkeley) 12/30/93
 .\" $FreeBSD$
 .\"
-.Dd May 19, 2020
+.Dd June 10, 2020
 .Dt SED 1
 .Os
 .Sh NAME
@@ -98,6 +98,10 @@ Append the editing commands found in the file
 .Ar command_file
 to the list of commands.
 The editing commands should each be listed on a separate line.
+The commands are read from the standard input if
+.Ar command_file
+is
+.Dq Li - .
 .It Fl I Ar extension
 Edit files in-place, saving backups with the specified
 .Ar extension .
@@ -636,7 +640,9 @@ The
 .Fl E , I , a
 and
 .Fl i
-options, the prefixing
+options, the special meaning of
+.Fl f Cm - ,
+the prefixing
 .Dq \&+
 in the second member of an address range,
 as well as the

Modified: stable/12/usr.bin/sed/tests/sed2_test.sh
==============================================================================
--- stable/12/usr.bin/sed/tests/sed2_test.sh	Sat Jun 27 14:14:00 2020	(r362686)
+++ stable/12/usr.bin/sed/tests/sed2_test.sh	Sat Jun 27 14:27:37 2020	(r362687)
@@ -88,10 +88,30 @@ escape_subst_body()
 	atf_check -o 'inline:abcx\n' sed 's/[ \r\t]//g' c
 }
 
+atf_test_case commands_on_stdin
+commands_on_stdin_head()
+{
+	atf_set "descr" "Verify -f -"
+}
+commands_on_stdin_body()
+{
+	printf "a\n" > a
+	printf "s/a/b/\n" > a_to_b
+	printf "s/b/c/\n" > b_to_c
+	printf "s/c/d/\n" > ./-
+	atf_check -o 'inline:d\n' sed -f a_to_b -f - -f ./- a < b_to_c
+
+	# Verify that nothing is printed if there are no input files provided.
+	printf 'i\\\nx' > insert_x
+	atf_check -o 'empty' sed -f - < insert_x
+}
+
 atf_init_test_cases()
 {
 	atf_add_test_case inplace_command_q
 	atf_add_test_case inplace_hardlink_src
 	atf_add_test_case inplace_symlink_src
 	atf_add_test_case escape_subst
+	atf_add_test_case commands_on_stdin
+	atf_add_test_case hex_subst
 }


More information about the svn-src-all mailing list