From: Denis Vlasenko Date: Sun, 20 Apr 2008 14:25:26 +0000 (-0000) Subject: start_stop_daemon: stat executable only once X-Git-Tag: 1_11_0~315 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=fe493479e2814f25edc270a5605678adbc90086a;p=oweals%2Fbusybox.git start_stop_daemon: stat executable only once function old new delta start_stop_daemon_main 954 976 +22 check 1661 1632 -29 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 22/-29) Total: -7 bytes --- diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c index 9150763cb..7a0d1166f 100644 --- a/debianutils/start_stop_daemon.c +++ b/debianutils/start_stop_daemon.c @@ -32,6 +32,7 @@ struct globals { int user_id; smallint quiet; smallint signal_nr; + struct stat execstat; }; #define G (*(struct globals*)&bb_common_bufsiz1) #define found (G.found ) @@ -42,6 +43,7 @@ struct globals { #define user_id (G.user_id ) #define quiet (G.quiet ) #define signal_nr (G.signal_nr ) +#define execstat (G.execstat ) #define INIT_G() \ do { \ user_id = -1; \ @@ -51,13 +53,12 @@ struct globals { static int pid_is_exec(pid_t pid) { - struct stat st, execstat; + struct stat st; char buf[sizeof("/proc//exe") + sizeof(int)*3]; sprintf(buf, "/proc/%u/exe", pid); if (stat(buf, &st) < 0) return 0; - xstat(execname, &execstat); if (st.st_dev == execstat.st_dev && st.st_ino == execstat.st_ino) return 1; @@ -299,6 +300,8 @@ int start_stop_daemon_main(int argc ATTRIBUTE_UNUSED, char **argv) if (errno) user_id = xuname2uid(userspec); } + if (execname) + xstat(execname, &execstat); do_procinit(); /* Both start and stop needs to know current processes */