From 0da069d3826568101560920bc2ca1796b1392630 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Mon, 29 May 2006 12:54:16 +0000 Subject: - move common code into new open_new_terminal() function; text data bss dec hex filename 864434 10244 645892 1520570 1733ba busybox_old 864386 10244 645892 1520522 17338a busybox_unstripped add/remove: 1/0 grow/shrink: 0/2 up/down: 92/-143 (-51) function old new delta open_new_terminal - 92 +92 exec_signal 345 276 -69 run 1527 1453 -74 Again, 48 != 51 so let's trust the former.. --- TODO | 2 +- init/init.c | 50 +++++++++++++++++++++++++++----------------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/TODO b/TODO index 35732e523..b75cec4f8 100644 --- a/TODO +++ b/TODO @@ -27,7 +27,7 @@ Rob Landley : bzip2 Compression-side support. init - General cleanup. + General cleanup (should use ENABLE_FEATURE_INIT_SYSLOG and ENABLE_FEATURE_INIT_DEBUG). Unify base64 handling. There's base64 encoding and decoding going on in: networking/wget.c:base64enc() diff --git a/init/init.c b/init/init.c index ec3c4d7cf..d800480ee 100644 --- a/init/init.c +++ b/init/init.c @@ -386,6 +386,23 @@ static void fixup_argv(int argc, char **argv, char *new_argv0) } } +/* Open the new terminal device */ +static void open_new_terminal(const char *device, char fail) { + struct stat sb; + + if ((device_open(device, O_RDWR)) < 0) { + if (stat(device, &sb) != 0) { + message(LOG | CONSOLE, "device '%s' does not exist.", device); + } else { + message(LOG | CONSOLE, "Bummer, can't open %s", device); + } + if (fail) + _exit(1); + /* else */ + halt_signal(SIGUSR1); + } +} + static pid_t run(const struct init_action *a) { int i, junk; @@ -405,7 +422,6 @@ static pid_t run(const struct init_action *a) sigprocmask(SIG_BLOCK, &nmask, &omask); if ((pid = fork()) == 0) { - struct stat sb; /* Clean up */ close(0); @@ -429,14 +445,7 @@ static pid_t run(const struct init_action *a) setsid(); /* Open the new terminal device */ - if ((device_open(a->terminal, O_RDWR)) < 0) { - if (stat(a->terminal, &sb) != 0) { - message(LOG | CONSOLE, "device '%s' does not exist.", a->terminal); - } else { - message(LOG | CONSOLE, "Bummer, can't open %s", a->terminal); - } - _exit(1); - } + open_new_terminal(a->terminal, 1); /* Make sure the terminal will act fairly normal for us */ set_term(0); @@ -575,12 +584,15 @@ static pid_t run(const struct init_action *a) getpid(), a->terminal, cmdpath); #if defined CONFIG_FEATURE_INIT_COREDUMPS - if (stat(CORE_ENABLE_FLAG_FILE, &sb) == 0) { - struct rlimit limit; + { + struct stat sb; + if (stat(CORE_ENABLE_FLAG_FILE, &sb) == 0) { + struct rlimit limit; - limit.rlim_cur = RLIM_INFINITY; - limit.rlim_max = RLIM_INFINITY; - setrlimit(RLIMIT_CORE, &limit); + limit.rlim_cur = RLIM_INFINITY; + limit.rlim_max = RLIM_INFINITY; + setrlimit(RLIMIT_CORE, &limit); + } } #endif @@ -729,15 +741,7 @@ static void exec_signal(int sig ATTRIBUTE_UNUSED) close(2); /* Open the new terminal device */ - if ((device_open(a->terminal, O_RDWR)) < 0) { - struct stat sb; - if (stat(a->terminal, &sb) != 0) { - message(LOG | CONSOLE, "device '%s' does not exist.", a->terminal); - } else { - message(LOG | CONSOLE, "Bummer, can't open %s", a->terminal); - } - halt_signal(SIGUSR1); - } + open_new_terminal(a->terminal, 0); /* Make sure the terminal will act fairly normal for us */ set_term(0); -- cgit v1.2.3