svn commit: trunk/busybox/init

vda at busybox.net vda at busybox.net
Mon Mar 5 19:22:05 UTC 2007


Author: vda
Date: 2007-03-05 11:22:04 -0800 (Mon, 05 Mar 2007)
New Revision: 18009

Log:
init: fix handling of stdio file descriptors


Modified:
   trunk/busybox/init/init.c


Changeset:
Modified: trunk/busybox/init/init.c
===================================================================
--- trunk/busybox/init/init.c	2007-03-05 16:56:25 UTC (rev 18008)
+++ trunk/busybox/init/init.c	2007-03-05 19:22:04 UTC (rev 18009)
@@ -201,7 +201,7 @@
 }
 
 /* Set terminal settings to reasonable defaults */
-static void set_term(void)
+static void set_sane_term(void)
 {
 	struct termios tty;
 
@@ -313,9 +313,8 @@
 {
 	/* empty tty_name means "use init's tty", else... */
 	if (tty_name[0]) {
-		close(0);
-		if ((device_open(tty_name, O_RDWR)) < 0) {
-			dup2(1, 0); /* restore fd #0 - avoid nasty surprises */
+		int fd = device_open(tty_name, O_RDWR);
+		if (fd < 0) {
 			message(L_LOG | L_CONSOLE, "Can't open %s: %s",
 				tty_name, strerror(errno));
 			if (fail)
@@ -325,13 +324,14 @@
 #else
 			_exit(2);
 #endif
+		} else {
+			dup2(fd, 0);
+			dup2(fd, 1);
+			dup2(fd, 2);
+			if (fd > 2) close(fd);
 		}
 	}
-	close(1);
-	close(2);
-	set_term();
-	dup(0);
-	dup(0);
+	set_sane_term();
 }
 
 static pid_t run(const struct init_action *a)
@@ -926,7 +926,7 @@
 
 	/* Figure out where the default console should be */
 	console_init();
-	set_term();
+	set_sane_term();
 	chdir("/");
 	setsid();
 	{




More information about the busybox-cvs mailing list