Module Name:    src
Committed By:   kre
Date:           Tue Nov 16 11:27:50 UTC 2021

Modified Files:
        src/bin/sh: eval.c miscbltin.c redir.c

Log Message:
Detect write errors to stdout, and exit(1) from some built-in
commands which (primarily) are used just to generate output
(or with a particular option combination do so).


To generate a diff of this commit:
cvs rdiff -u -r1.184 -r1.185 src/bin/sh/eval.c
cvs rdiff -u -r1.45 -r1.46 src/bin/sh/miscbltin.c
cvs rdiff -u -r1.70 -r1.71 src/bin/sh/redir.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/bin/sh/eval.c
diff -u src/bin/sh/eval.c:1.184 src/bin/sh/eval.c:1.185
--- src/bin/sh/eval.c:1.184	Tue Nov 16 11:25:44 2021
+++ src/bin/sh/eval.c	Tue Nov 16 11:27:50 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: eval.c,v 1.184 2021/11/16 11:25:44 kre Exp $	*/
+/*	$NetBSD: eval.c,v 1.185 2021/11/16 11:27:50 kre Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)eval.c	8.9 (Berkeley) 6/8/95";
 #else
-__RCSID("$NetBSD: eval.c,v 1.184 2021/11/16 11:25:44 kre Exp $");
+__RCSID("$NetBSD: eval.c,v 1.185 2021/11/16 11:27:50 kre Exp $");
 #endif
 #endif /* not lint */
 
@@ -1346,6 +1346,7 @@ evalcommand(union node *cmd, int flgs, s
 			optreset = 1;
 			optind = 1;
 			builtin_flags = flags;
+			clr_err(out1);	/* discard previous I/O errors */
 			exitstatus = cmdentry.u.bltin(argc, argv);
 		} else {
 			e = exception;

Index: src/bin/sh/miscbltin.c
diff -u src/bin/sh/miscbltin.c:1.45 src/bin/sh/miscbltin.c:1.46
--- src/bin/sh/miscbltin.c:1.45	Wed Sep 15 18:30:57 2021
+++ src/bin/sh/miscbltin.c	Tue Nov 16 11:27:50 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: miscbltin.c,v 1.45 2021/09/15 18:30:57 kre Exp $	*/
+/*	$NetBSD: miscbltin.c,v 1.46 2021/11/16 11:27:50 kre Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)miscbltin.c	8.4 (Berkeley) 5/4/95";
 #else
-__RCSID("$NetBSD: miscbltin.c,v 1.45 2021/09/15 18:30:57 kre Exp $");
+__RCSID("$NetBSD: miscbltin.c,v 1.46 2021/11/16 11:27:50 kre Exp $");
 #endif
 #endif /* not lint */
 
@@ -288,6 +288,11 @@ umaskcmd(int argc, char **argv)
 			umask(~mask & 0777);
 		}
 	}
+	flushout(out1);
+	if (io_err(out1)) {
+		out2str("umask: I/O error\n");
+		return 1;
+	}
 	return 0;
 }
 
@@ -445,7 +450,7 @@ ulimitcmd(int argc, char **argv)
 				out1fmt("%c", which ? '\t' : '\n');
 			}
 		}
-		return 0;
+		goto done;
 	}
 
 	if (getrlimit(l->cmd, &limit) == -1)
@@ -477,5 +482,11 @@ ulimitcmd(int argc, char **argv)
 #endif
 		}
 	}
+  done:;
+	flushout(out1);
+	if (io_err(out1)) {
+		out2str("ulimit: I/O error (stdout)\n");
+		return 1;
+	}
 	return 0;
 }

Index: src/bin/sh/redir.c
diff -u src/bin/sh/redir.c:1.70 src/bin/sh/redir.c:1.71
--- src/bin/sh/redir.c:1.70	Wed Nov 10 15:26:34 2021
+++ src/bin/sh/redir.c	Tue Nov 16 11:27:50 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: redir.c,v 1.70 2021/11/10 15:26:34 kre Exp $	*/
+/*	$NetBSD: redir.c,v 1.71 2021/11/16 11:27:50 kre Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)redir.c	8.2 (Berkeley) 5/4/95";
 #else
-__RCSID("$NetBSD: redir.c,v 1.70 2021/11/10 15:26:34 kre Exp $");
+__RCSID("$NetBSD: redir.c,v 1.71 2021/11/16 11:27:50 kre Exp $");
 #endif
 #endif /* not lint */
 
@@ -1033,10 +1033,8 @@ fdflagscmd(int argc, char *argv[])
 
 		for (i = 0; i <= max_user_fd; i++)
 			printone(i, 0, verbose, 1);
-		return 0;
-	}
 
-	while ((num = *argv++) != NULL) {
+	} else while ((num = *argv++) != NULL) {
 		int fd = number(num);
 
 		while (num[0] == '0' && num[1] != '\0')		/* skip 0's */
@@ -1050,6 +1048,11 @@ fdflagscmd(int argc, char *argv[])
 		else
 			printone(fd, 1, verbose, argc > 1);
 	}
+	flushout(out1);
+	if (io_err(out1)) {
+		out2str("fdflags: I/O error\n");
+		return 1;
+	}
 	return 0;
 }
 

Reply via email to