- move common code into new open_new_terminal() function;
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Mon, 29 May 2006 12:54:16 +0000 (12:54 -0000)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Mon, 29 May 2006 12:54:16 +0000 (12:54 -0000)
   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
init/init.c

diff --git a/TODO b/TODO
index 35732e5..b75cec4 100644 (file)
--- a/TODO
+++ b/TODO
@@ -27,7 +27,7 @@ Rob Landley <rob@landley.net>:
   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()
index ec3c4d7..d800480 100644 (file)
@@ -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);