[git commit] libbb: code shrink by factoring out common update_utmp_DEAD_PROCESS

Denys Vlasenko vda.linux at googlemail.com
Mon Jan 5 14:37:58 UTC 2015


commit: http://git.busybox.net/busybox/commit/?id=da9212667c99f2f2121747c4715d067deb7c155b
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
update_utmp_DEAD_PROCESS                               -      17     +17
telnetd_main                                        1685    1674     -11
mark_terminated                                       56      45     -11
handle_sigchld                                        74      63     -11

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 include/libbb.h      |    2 ++
 init/init.c          |    6 +-----
 libbb/utmp.c         |   14 ++++++++++++++
 loginutils/login.c   |    2 +-
 networking/telnetd.c |   12 ++----------
 5 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/include/libbb.h b/include/libbb.h
index 68a7cf0..be792d6 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -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
 
 
diff --git a/init/init.c b/init/init.c
index d99d68c..b2fe856 100644
--- a/init/init.c
+++ b/init/init.c
@@ -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;
diff --git a/libbb/utmp.c b/libbb/utmp.c
index 09443fb..8ad9ba2 100644
--- a/libbb/utmp.c
+++ b/libbb/utmp.c
@@ -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);
+}
diff --git a/loginutils/login.c b/loginutils/login.c
index a4b19cc..b9d9103 100644
--- a/loginutils/login.c
+++ b/loginutils/login.c
@@ -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;
diff --git a/networking/telnetd.c b/networking/telnetd.c
index 9e7a84c..6aee958 100644
--- a/networking/telnetd.c
+++ b/networking/telnetd.c
@@ -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;
 	}


More information about the busybox-cvs mailing list