libbb: code shrink by factoring out common update_utmp_DEAD_PROCESS
No binary (build failed)
—
(log yok)
| @@ -921,9 +921,11 @@ void die_if_bad_username(const char* name) FAST_FUNC; | |
| #if ENABLE_FEATURE_UTMP | |
| void FAST_FUNC write_new_utmp(pid_t pid, int new_type, const char *tty_name, const char *username, const char *hostname); | |
| void FAST_FUNC update_utmp(pid_t pid, int new_type, const char *tty_name, const char *username, const char *hostname); | |
| + | void FAST_FUNC update_utmp_DEAD_PROCESS(pid_t pid); |
| #else | |
| # define write_new_utmp(pid, new_type, tty_name, username, hostname) ((void)0) | |
| # define update_utmp(pid, new_type, tty_name, username, hostname) ((void)0) | |
| + | # define update_utmp_DEAD_PROCESS(pid) ((void)0) |
| #endif | |
| @@ -538,11 +538,7 @@ static struct init_action *mark_terminated(pid_t pid) | |
| struct init_action *a; | |
| if (pid > 0) { | |
| - | update_utmp(pid, DEAD_PROCESS, |
| - | /*tty_name:*/ NULL, |
| - | /*username:*/ NULL, |
| - | /*hostname:*/ NULL |
| - | ); |
| + | update_utmp_DEAD_PROCESS(pid); |
| for (a = init_action_list; a; a = a->next) { | |
| if (a->pid == pid) { | |
| a->pid = 0; | |
| @@ -130,3 +130,17 @@ void FAST_FUNC update_utmp(pid_t pid, int new_type, const char *tty_name, const | |
| updwtmp(bb_path_wtmp_file, &utent); | |
| #endif | |
| } | |
| + | |
| + | /* man utmp: |
| + | * When init(8) finds that a process has exited, it locates its utmp entry |
| + | * by ut_pid, sets ut_type to DEAD_PROCESS, and clears ut_user, ut_host |
| + | * and ut_time with null bytes. |
| + | * [same applies to other processes which maintain utmp entries, like telnetd] |
| + | * |
| + | * We do not bother actually clearing fields: |
| + | * it might be interesting to know who was logged in and from where |
| + | */ |
| + | void FAST_FUNC update_utmp_DEAD_PROCESS(pid_t pid) |
| + | { |
| + | update_utmp(pid, DEAD_PROCESS, NULL, NULL, NULL); |
| + | } |
| @@ -454,7 +454,7 @@ int login_main(int argc UNUSED_PARAM, char **argv) | |
| else { | |
| if (safe_waitpid(child_pid, NULL, 0) == -1) | |
| bb_perror_msg("waitpid"); | |
| - | update_utmp(child_pid, DEAD_PROCESS, NULL, NULL, NULL); |
| + | update_utmp_DEAD_PROCESS(child_pid); |
| } | |
| IF_PAM(login_pam_end(pamh);) | |
| return 0; | |
| @@ -462,15 +462,7 @@ static void handle_sigchld(int sig UNUSED_PARAM) | |
| while (ts) { | |
| if (ts->shell_pid == pid) { | |
| ts->shell_pid = -1; | |
| - | // man utmp: |
| - | // When init(8) finds that a process has exited, it locates its utmp entry |
| - | // by ut_pid, sets ut_type to DEAD_PROCESS, and clears ut_user, ut_host |
| - | // and ut_time with null bytes. |
| - | // [same applies to other processes which maintain utmp entries, like telnetd] |
| - | // |
| - | // We do not bother actually clearing fields: |
| - | // it might be interesting to know who was logged in and from where |
| - | update_utmp(pid, DEAD_PROCESS, /*tty_name:*/ NULL, /*username:*/ NULL, /*hostname:*/ NULL); |
| + | update_utmp_DEAD_PROCESS(pid); |
| break; | |
| } | |
| ts = ts->next; | |
| @@ -739,7 +731,7 @@ int telnetd_main(int argc UNUSED_PARAM, char **argv) | |
| continue; | |
| kill_session: | |
| if (ts->shell_pid > 0) | |
| - | update_utmp(ts->shell_pid, DEAD_PROCESS, /*tty_name:*/ NULL, /*username:*/ NULL, /*hostname:*/ NULL); |
| + | update_utmp_DEAD_PROCESS(ts->shell_pid); |
| free_session(ts); | |
| ts = next; | |
| } | |