*: a bit of code shrink
authorDenis Vlasenko <vda.linux@googlemail.com>
Sun, 9 Nov 2008 00:15:11 +0000 (00:15 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sun, 9 Nov 2008 00:15:11 +0000 (00:15 -0000)
function                                             old     new   delta
stop_handler                                          41      38      -3
sulogin_main                                         508     504      -4
got_cont                                               4       -      -4
cont_handler                                          11       -     -11
startservice                                         309     297     -12
processorstart                                       423     409     -14
tcpudpsvd_main                                      1861    1843     -18
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 0/5 up/down: 0/-66)             Total: -66 bytes

init/init.c
loginutils/login.c
loginutils/sulogin.c
networking/nc.c
networking/tcpudp.c
runit/runsv.c
runit/svlogd.c
util-linux/script.c

index 3d171d7..ef38781 100644 (file)
@@ -60,7 +60,6 @@ struct init_action {
 static struct init_action *init_action_list = NULL;
 
 static const char *log_console = VC_5;
-static sig_atomic_t got_cont = 0;
 
 enum {
        L_LOG = 0x1,
@@ -613,24 +612,21 @@ static void ctrlaltdel_signal(int sig UNUSED_PARAM)
        run_actions(CTRLALTDEL);
 }
 
+/* The SIGCONT handler is set to record_signo().
+ * It just sets bb_got_signal = SIGCONT.  */
+
 /* The SIGSTOP & SIGTSTP handler */
 static void stop_handler(int sig UNUSED_PARAM)
 {
        int saved_errno = errno;
 
-       got_cont = 0;
-       while (!got_cont)
+       bb_got_signal = 0;
+       while (bb_got_signal == 0)
                pause();
 
        errno = saved_errno;
 }
 
-/* The SIGCONT handler */
-static void cont_handler(int sig UNUSED_PARAM)
-{
-       got_cont = 1;
-}
-
 static void new_init_action(uint8_t action_type, const char *command, const char *cons)
 {
        struct init_action *a, *last;
@@ -808,7 +804,7 @@ int init_main(int argc UNUSED_PARAM, char **argv)
                        + (1 << SIGTERM)  /* reboot */
                        , halt_reboot_pwoff);
                signal(SIGINT, ctrlaltdel_signal);
-               signal(SIGCONT, cont_handler);
+               signal(SIGCONT, record_signo);
                bb_signals(0
                        + (1 << SIGSTOP)
                        + (1 << SIGTSTP)
index 70e3b13..a18b4d5 100644 (file)
@@ -486,8 +486,8 @@ int login_main(int argc UNUSED_PARAM, char **argv)
        // If this stuff is really needed, add it and explain why!
 
        /* Set signals to defaults */
-       /*signal(SIGALRM, SIG_DFL); - not needed, we already set it
-        * to non-SIG_IGN, and on exec such signals are reset to SIG_DFL */
+       /* Non-ignored signals revert to SIG_DFL on exec anyway */
+       /*signal(SIGALRM, SIG_DFL);*/
 
        /* Is this correct? This way user can ctrl-c out of /etc/profile,
         * potentially creating security breach (tested with bash 3.0).
index bfd4256..892c434 100644 (file)
@@ -32,11 +32,12 @@ int sulogin_main(int argc UNUSED_PARAM, char **argv)
 
        opt_complementary = "t+"; /* -t N */
        getopt32(argv, "t:", &timeout);
+       argv += optind;
 
-       if (argv[optind]) {
+       if (argv[0]) {
                close(0);
                close(1);
-               dup(xopen(argv[optind], O_RDWR));
+               dup(xopen(argv[0], O_RDWR));
                close(2);
                dup(0);
        }
index 1a99f91..fe845f5 100644 (file)
@@ -131,7 +131,8 @@ int nc_main(int argc, char **argv)
 
        if (wsecs) {
                alarm(0);
-               signal(SIGALRM, SIG_DFL);
+               /* Non-ignored siganls revert to SIG_DFL on exec anyway */
+               /*signal(SIGALRM, SIG_DFL);*/
        }
 
        /* -e given? */
index 0d8217e..3b73f21 100644 (file)
@@ -497,9 +497,9 @@ int tcpudpsvd_main(int argc UNUSED_PARAM, char **argv)
 
        xdup2(0, 1);
 
-       signal(SIGTERM, SIG_DFL);
-       signal(SIGPIPE, SIG_DFL);
-       signal(SIGCHLD, SIG_DFL);
+       signal(SIGPIPE, SIG_DFL); /* this one was SIG_IGNed */
+       /* Non-ignored signals revert to SIG_DFL on exec anyway */
+       /*signal(SIGCHLD, SIG_DFL);*/
        sig_unblock(SIGCHLD);
 
 #ifdef SSLSVD
index 56244d0..1237208 100644 (file)
@@ -336,10 +336,11 @@ static void startservice(struct svdir *s)
                                xdup2(logpipe.wr, 1);
                        }
                }
-               bb_signals(0
+               /* Non-ignored signals revert to SIG_DFL on exec anyway */
+               /*bb_signals(0
                        + (1 << SIGCHLD)
                        + (1 << SIGTERM)
-                       , SIG_DFL);
+                       , SIG_DFL);*/
                sig_unblock(SIGCHLD);
                sig_unblock(SIGTERM);
                execvp(*run, run);
index 6419128..9beb9f5 100644 (file)
@@ -227,11 +227,12 @@ static void processorstart(struct logdir *ld)
                int fd;
 
                /* child */
-               bb_signals(0
+               /* Non-ignored signals revert to SIG_DFL on exec anyway */
+               /*bb_signals(0
                        + (1 << SIGTERM)
                        + (1 << SIGALRM)
                        + (1 << SIGHUP)
-                       , SIG_DFL);
+                       , SIG_DFL);*/
                sig_unblock(SIGTERM);
                sig_unblock(SIGALRM);
                sig_unblock(SIGHUP);
index 39ec546..2e103fd 100644 (file)
@@ -179,7 +179,8 @@ int script_main(int argc UNUSED_PARAM, char **argv)
        setsid();
        ioctl(0, TIOCSCTTY, 0 /* 0: don't forcibly steal */);
 
-       /* signal(SIGCHLD, SIG_DFL); - exec does this for us */
+       /* Non-ignored signals revert to SIG_DFL on exec anyway */
+       /*signal(SIGCHLD, SIG_DFL);*/
        execl(shell, shell, shell_opt, shell_arg, NULL);
        bb_simple_perror_msg_and_die(shell);
 }