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
This commit is contained in:
parent
25cfe4996e
commit
fe493479e2
@ -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 */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user