*: a bit of code shrink
No binary (build failed)
—
(log yok)
| @@ -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) | |
| @@ -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). | |
| @@ -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); | |
| } | |
| @@ -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? */ | |
| @@ -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 | |
| @@ -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); | |
| @@ -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); | |
| @@ -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); | |
| } | |