svn commit: r205165 - head/lib/libc/gen

Dag-Erling Smørgrav des at des.no
Wed Mar 17 16:33:11 UTC 2010


Bruce Evans <brde at optusnet.com.au> writes:
> Even if the child causes the flush, the content of stdout and stderr
> is not flushed normally since it is redirected to /dev/null.  Unflushed
> input in stdin is handled more brokenly: although stdin is redirected
> to /dev/null, input on it can still be read via stdin's buffer.
> Inheriting unflushed input on other streams is a feature (unless these
> streams are open on fd's 0-2; then these streams will have the same
> corruption as std* streams open on their normal fd's 0-2).

how about

Index: gen/daemon.c
===================================================================
--- gen/daemon.c	(revision 204870)
+++ gen/daemon.c	(working copy)
@@ -37,6 +37,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <paths.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <signal.h>
 #include <unistd.h>
@@ -81,6 +82,9 @@
 		(void)chdir("/");
 
 	if (!noclose && (fd = _open(_PATH_DEVNULL, O_RDWR, 0)) != -1) {
+		fpurge(stdin);
+		fflush(stdout);
+		fflush(stderr);
 		(void)_dup2(fd, STDIN_FILENO);
 		(void)_dup2(fd, STDOUT_FILENO);
 		(void)_dup2(fd, STDERR_FILENO);

?

DES
-- 
Dag-Erling Smørgrav - des at des.no


More information about the svn-src-all mailing list