Module Name:    src
Committed By:   kre
Date:           Tue Nov 16 16:57:15 UTC 2021

Modified Files:
        src/bin/pwd: pwd.c
        src/bin/sh: cd.c

Log Message:
Make pwd (both /bin/pwd and the /bin/sh built-in version) check for
write errors on stdout, and indicate an error if that happens.


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 src/bin/pwd/pwd.c
cvs rdiff -u -r1.51 -r1.52 src/bin/sh/cd.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/pwd/pwd.c
diff -u src/bin/pwd/pwd.c:1.22 src/bin/pwd/pwd.c:1.23
--- src/bin/pwd/pwd.c:1.22	Mon Aug 29 14:51:19 2011
+++ src/bin/pwd/pwd.c	Tue Nov 16 16:57:15 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: pwd.c,v 1.22 2011/08/29 14:51:19 joerg Exp $ */
+/* $NetBSD: pwd.c,v 1.23 2021/11/16 16:57:15 kre Exp $ */
 
 /*
  * Copyright (c) 1991, 1993, 1994
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1991, 19
 #if 0
 static char sccsid[] = "@(#)pwd.c	8.3 (Berkeley) 4/1/94";
 #else
-__RCSID("$NetBSD: pwd.c,v 1.22 2011/08/29 14:51:19 joerg Exp $");
+__RCSID("$NetBSD: pwd.c,v 1.23 2021/11/16 16:57:15 kre Exp $");
 #endif
 #endif /* not lint */
 
@@ -107,6 +107,10 @@ main(int argc, char *argv[])
 
 	(void)printf("%s\n", p);
 
+	(void)fflush(stdout);
+	if (ferror(stdout))
+		err(EXIT_FAILURE, "stdout");
+
 	exit(EXIT_SUCCESS);
 	/* NOTREACHED */
 }

Index: src/bin/sh/cd.c
diff -u src/bin/sh/cd.c:1.51 src/bin/sh/cd.c:1.52
--- src/bin/sh/cd.c:1.51	Sun Oct 31 02:12:01 2021
+++ src/bin/sh/cd.c	Tue Nov 16 16:57:15 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd.c,v 1.51 2021/10/31 02:12:01 kre Exp $	*/
+/*	$NetBSD: cd.c,v 1.52 2021/11/16 16:57:15 kre Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)cd.c	8.2 (Berkeley) 5/4/95";
 #else
-__RCSID("$NetBSD: cd.c,v 1.51 2021/10/31 02:12:01 kre Exp $");
+__RCSID("$NetBSD: cd.c,v 1.52 2021/11/16 16:57:15 kre Exp $");
 #endif
 #endif /* not lint */
 
@@ -364,8 +364,15 @@ pwdcmd(int argc, char **argv)
 		if (curdir == NULL)
 			error("Unable to find current directory");
 	}
+
+	flushout(out1);		/* make sure buffer is empty */
+	clr_err(out1);		/* and forget any earlier errors */
 	out1str(curdir);
 	out1c('\n');
+	flushout(out1);
+	if (io_err(out1))
+		error("stdout: %s", strerror(errno));
+
 	return 0;
 }
 

Reply via email to