Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Jul 2023 15:14:55 GMT
From:      =?utf-8?Q?Dag-Erling=20Sm=C3=B8rgrav?= <des@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 77d9e708c07b - stable/13 - asa: Error out if writing to stdout failed.
Message-ID:  <202307031514.363FEtrp017851@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=77d9e708c07b7bbbebc8e729f8fb339fb99c2d99

commit 77d9e708c07b7bbbebc8e729f8fb339fb99c2d99
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2023-06-15 19:23:19 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2023-07-03 15:13:11 +0000

    asa: Error out if writing to stdout failed.
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Reviewed by:    markj
    Differential Revision:  https://reviews.freebsd.org/D40562
    
    (cherry picked from commit 9e379f9639d51442ad1d5e1800c687ef2c954901)
    
    asa: Read from stdin if *argv is "-".
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Reviewed by:    markj
    Differential Revision:  https://reviews.freebsd.org/D40563
    
    (cherry picked from commit f08f90e6987775f88d25efbd8762c361819f40ba)
    
    asa: Add some unit tests.
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Reviewed by:    markj
    Differential Revision:  https://reviews.freebsd.org/D40564
    
    (cherry picked from commit b7412da2e122d9274341ef840c6918409bc523b3)
---
 etc/mtree/BSD.tests.dist      |  2 +
 usr.bin/asa/Makefile          |  5 ++-
 usr.bin/asa/asa.c             | 25 ++++++++---
 usr.bin/asa/tests/Makefile    |  4 ++
 usr.bin/asa/tests/asa_test.sh | 99 +++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 126 insertions(+), 9 deletions(-)

diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist
index eb62812bfcd8..35d8e9505b9a 100644
--- a/etc/mtree/BSD.tests.dist
+++ b/etc/mtree/BSD.tests.dist
@@ -886,6 +886,8 @@
     usr.bin
         apply
         ..
+        asa
+        ..
         awk
         ..
         basename
diff --git a/usr.bin/asa/Makefile b/usr.bin/asa/Makefile
index c2a221ae027b..a29db0f31781 100644
--- a/usr.bin/asa/Makefile
+++ b/usr.bin/asa/Makefile
@@ -1,6 +1,7 @@
-#	$NetBSD: Makefile,v 1.2 1995/03/25 18:04:51 glass Exp $
-# $FreeBSD$
+.include <src.opts.mk>
 
 PROG=	asa
+HAS_TESTS=
+SUBDIR.${MK_TESTS}=	tests
 
 .include <bsd.prog.mk>
diff --git a/usr.bin/asa/asa.c b/usr.bin/asa/asa.c
index 22174ed340cd..a6c3d7d7c1e5 100644
--- a/usr.bin/asa/asa.c
+++ b/usr.bin/asa/asa.c
@@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
 #include <err.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 
 static void asa(FILE *);
@@ -71,16 +72,23 @@ main(int argc, char *argv[])
 		asa(stdin);
 	else {
 		while ((fn = *argv++) != NULL) {
-                        if ((fp = fopen(fn, "r")) == NULL) {
-				warn("%s", fn);
-				exval = 1;
-				continue;
-                        }
-			asa(fp);
-			fclose(fp);
+			if (strcmp(fn, "-") == 0) {
+				asa(stdin);
+			} else {
+				if ((fp = fopen(fn, "r")) == NULL) {
+					warn("%s", fn);
+					exval = 1;
+					continue;
+				}
+				asa(fp);
+				fclose(fp);
+			}
 		}
 	}
 
+	if (fflush(stdout) != 0)
+		err(1, "stdout");
+
 	exit(exval);
 }
 
@@ -140,4 +148,7 @@ asa(FILE *f)
 
 		putchar('\n');
 	}
+
+	if (ferror(stdout) != 0)
+		err(1, "stdout");
 }
diff --git a/usr.bin/asa/tests/Makefile b/usr.bin/asa/tests/Makefile
new file mode 100644
index 000000000000..c8c0cde1b3a2
--- /dev/null
+++ b/usr.bin/asa/tests/Makefile
@@ -0,0 +1,4 @@
+PACKAGE=	tests
+ATF_TESTS_SH=	asa_test
+
+.include <bsd.test.mk>
diff --git a/usr.bin/asa/tests/asa_test.sh b/usr.bin/asa/tests/asa_test.sh
new file mode 100644
index 000000000000..429342d530e4
--- /dev/null
+++ b/usr.bin/asa/tests/asa_test.sh
@@ -0,0 +1,99 @@
+#
+# Copyright (c) 2023 Klara, Inc.
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+a="The magic words are"
+b="Squeamish Ossifrage"
+
+atf_check_asa() {
+	atf_check -o file:"$2" asa "$1"
+	atf_check -o file:"$2" asa <"$1"
+	atf_check -o file:"$2" asa - <"$1"
+}
+
+atf_test_case space
+space_head() {
+	atf_set descr "First character on line is ' '"
+}
+space_body() {
+	printf " %s\n %s\n" "$a" "$b" >infile
+	printf "%s\n%s\n" "$a" "$b" >outfile
+	atf_check_asa infile outfile
+}
+
+atf_test_case zero
+zero_head() {
+	atf_set descr "First character on line is '0'"
+}
+zero_body() {
+	printf " %s\n0%s\n" "$a" "$b" >infile
+	printf "%s\n\n%s\n" "$a" "$b" >outfile
+	atf_check_asa infile outfile
+}
+
+atf_test_case one
+one_head() {
+	atf_set descr "First character on line is '1'"
+}
+one_body() {
+	printf " %s\n1%s\n" "$a" "$b" >infile
+	printf "%s\f%s\n" "$a" "$b" >outfile
+	atf_check_asa infile outfile
+}
+
+atf_test_case plus
+plus_head() {
+	atf_set descr "First character on line is '+'"
+}
+plus_body() {
+	printf " %s\n+%s\n" "$a" "$b" >infile
+	printf "%s\r%s\n" "$a" "$b" >outfile
+	atf_check_asa infile outfile
+}
+
+atf_test_case plus_top
+plus_top_head() {
+	atf_set descr "First character in input is '+'"
+}
+plus_top_body() {
+	printf "+%s\n+%s\n" "$a" "$b" >infile
+	printf "%s\r%s\n" "$a" "$b" >outfile
+	atf_check_asa infile outfile
+}
+
+atf_test_case stdout
+stdout_head() {
+	atf_set descr "Failure to write to stdout"
+}
+stdout_body() {
+	(
+		trap "" PIPE
+		echo " $a $b" | asa 2>stderr
+		echo $? >result
+	) | true
+	atf_check -o inline:"1\n" cat result
+	atf_check -o match:"stdout" cat stderr
+}
+
+atf_test_case dashdash
+dashdash_head() {
+	atf_set descr "Use -- to end options"
+}
+dashdash_body() {
+	echo " $a $b" >-infile
+	atf_check -s not-exit:0 -e match:"illegal option" asa -infile
+	atf_check -o inline:"$a $b\n" asa -- -infile
+}
+
+atf_init_test_cases()
+{
+	atf_add_test_case space
+	atf_add_test_case zero
+	atf_add_test_case one
+	atf_add_test_case plus
+	atf_add_test_case plus_top
+	atf_add_test_case stdout
+	atf_add_test_case dashdash
+}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202307031514.363FEtrp017851>