aboutsummaryrefslogtreecommitdiff
path: root/init
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-03-17 22:01:42 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-03-17 22:01:42 +0000
commite421b5ebf6b2484455ea36bb6c98deff685088e3 (patch)
tree38f0cb4bc09f2409b15b0096bed964fb098108e1 /init
parent2724fa9d8a076f52c158627877d59894789b09a1 (diff)
downloadbusybox-w32-e421b5ebf6b2484455ea36bb6c98deff685088e3.tar.gz
busybox-w32-e421b5ebf6b2484455ea36bb6c98deff685088e3.tar.bz2
busybox-w32-e421b5ebf6b2484455ea36bb6c98deff685088e3.zip
init: do not close all descriptors > 2. We were doing it - sometimes.
Good choices are "do it, always" or "don't do it". Second is smaller.
Diffstat (limited to 'init')
-rw-r--r--init/init.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/init/init.c b/init/init.c
index eefb9df55..c4674a55f 100644
--- a/init/init.c
+++ b/init/init.c
@@ -214,8 +214,7 @@ static void console_init(void)
214 if (fd >= 0) { 214 if (fd >= 0) {
215 dup2(fd, 0); 215 dup2(fd, 0);
216 dup2(fd, 1); 216 dup2(fd, 1);
217 dup2(fd, 2); 217 xmove_fd(fd, 2);
218 while (fd > 2) close(fd--);
219 } 218 }
220 messageD(L_LOG, "console='%s'", s); 219 messageD(L_LOG, "console='%s'", s);
221 } else { 220 } else {
@@ -223,7 +222,7 @@ static void console_init(void)
223 * (so that they won't be used by future opens) */ 222 * (so that they won't be used by future opens) */
224 223
225 /* bb_sanitize_stdio(); - WRONG. 224 /* bb_sanitize_stdio(); - WRONG.
226 * Fail if "/dev/null" doesnt exist, and for init 225 * It fails if "/dev/null" doesnt exist, and for init
227 * this is a real possibility! Open code it instead. */ 226 * this is a real possibility! Open code it instead. */
228 227
229 int fd = open(bb_dev_null, O_RDWR); 228 int fd = open(bb_dev_null, O_RDWR);
@@ -234,11 +233,11 @@ static void console_init(void)
234 while ((unsigned)fd < 2) 233 while ((unsigned)fd < 2)
235 fd = dup(fd); 234 fd = dup(fd);
236 if (fd > 2) 235 if (fd > 2)
237 close (fd); 236 close(fd);
238 } 237 }
239 238
240 s = getenv("TERM"); 239 s = getenv("TERM");
241 if (ioctl(0, TIOCGSERIAL, &sr) == 0) { 240 if (ioctl(STDIN_FILENO, TIOCGSERIAL, &sr) == 0) {
242 /* Force the TERM setting to vt102 for serial console 241 /* Force the TERM setting to vt102 for serial console
243 * if TERM is set to linux (the default) */ 242 * if TERM is set to linux (the default) */
244 if (!s || strcmp(s, "linux") == 0) 243 if (!s || strcmp(s, "linux") == 0)