git: 09bc6a5d5b33 - main - mail: Exit non-zero on failure to collect mail.

From: Dag-Erling Smørgrav <des_at_FreeBSD.org>
Date: Tue, 29 Apr 2025 15:12:40 UTC
The branch main has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=09bc6a5d5b3333bc91e5f9fdf1e7bb282c4aea5a

commit 09bc6a5d5b3333bc91e5f9fdf1e7bb282c4aea5a
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2025-04-29 15:12:17 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2025-04-29 15:12:30 +0000

    mail: Exit non-zero on failure to collect mail.
    
    While here, avoid non-portable `pipe2()` in the regression test.
    
    Fixes:          59597032c948
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Reviewed by:    kevans
    Differential Revision:  https://reviews.freebsd.org/D50069
---
 usr.bin/mail/send.c                   | 4 +++-
 usr.bin/mail/tests/mail_sigint_test.c | 5 +++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/usr.bin/mail/send.c b/usr.bin/mail/send.c
index b4fbd4cbfd8a..fe1086264a9c 100644
--- a/usr.bin/mail/send.c
+++ b/usr.bin/mail/send.c
@@ -293,8 +293,10 @@ mail1(struct header *hp, int printheaders)
 	 * Collect user's mail from standard input.
 	 * Get the result as mtf.
 	 */
-	if ((mtf = collect(hp, printheaders)) == NULL)
+	if ((mtf = collect(hp, printheaders)) == NULL) {
+		senderr++;
 		return;
+	}
 	if (value("interactive") != NULL) {
 		if (value("askcc") != NULL || value("askbcc") != NULL) {
 			if (value("askcc") != NULL)
diff --git a/usr.bin/mail/tests/mail_sigint_test.c b/usr.bin/mail/tests/mail_sigint_test.c
index 76bf9b19b7f1..e2889493f3cd 100644
--- a/usr.bin/mail/tests/mail_sigint_test.c
+++ b/usr.bin/mail/tests/mail_sigint_test.c
@@ -39,7 +39,7 @@ mailx_sigint(bool interactive)
 
 	/* input, output, error, sync pipes */
 	if (pipe(ipd) != 0 || pipe(opd) != 0 || pipe(epd) != 0 ||
-	    pipe2(spd, O_CLOEXEC) != 0)
+	    pipe(spd) != 0 || fcntl(spd[1], F_SETFD, FD_CLOEXEC) != 0)
 		atf_tc_fail("failed to pipe");
 	/* fork child */
 	if ((pid = fork()) < 0)
@@ -55,6 +55,7 @@ mailx_sigint(bool interactive)
 		dup2(epd[1], STDERR_FILENO);
 		close(epd[0]);
 		close(epd[1]);
+		close(spd[0]);
 		/* force dead.letter to go to cwd */
 		setenv("HOME", ".", 1);
 		/* exec mailx */
@@ -113,7 +114,7 @@ mailx_sigint(bool interactive)
 	close(spd[0]);
 	if (interactive) {
 		ATF_CHECK(WIFEXITED(status));
-		ATF_CHECK_INTEQ(0, WEXITSTATUS(status));
+		ATF_CHECK_INTEQ(1, WEXITSTATUS(status));
 		ATF_CHECK_INTEQ(2, kc);
 		ATF_CHECK_STREQ("", obuf);
 		ATF_CHECK_MATCH("Interrupt -- one more to kill letter", ebuf);