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;
|
int user_id;
|
||||||
smallint quiet;
|
smallint quiet;
|
||||||
smallint signal_nr;
|
smallint signal_nr;
|
||||||
|
struct stat execstat;
|
||||||
};
|
};
|
||||||
#define G (*(struct globals*)&bb_common_bufsiz1)
|
#define G (*(struct globals*)&bb_common_bufsiz1)
|
||||||
#define found (G.found )
|
#define found (G.found )
|
||||||
@ -42,6 +43,7 @@ struct globals {
|
|||||||
#define user_id (G.user_id )
|
#define user_id (G.user_id )
|
||||||
#define quiet (G.quiet )
|
#define quiet (G.quiet )
|
||||||
#define signal_nr (G.signal_nr )
|
#define signal_nr (G.signal_nr )
|
||||||
|
#define execstat (G.execstat )
|
||||||
#define INIT_G() \
|
#define INIT_G() \
|
||||||
do { \
|
do { \
|
||||||
user_id = -1; \
|
user_id = -1; \
|
||||||
@ -51,13 +53,12 @@ struct globals {
|
|||||||
|
|
||||||
static int pid_is_exec(pid_t pid)
|
static int pid_is_exec(pid_t pid)
|
||||||
{
|
{
|
||||||
struct stat st, execstat;
|
struct stat st;
|
||||||
char buf[sizeof("/proc//exe") + sizeof(int)*3];
|
char buf[sizeof("/proc//exe") + sizeof(int)*3];
|
||||||
|
|
||||||
sprintf(buf, "/proc/%u/exe", pid);
|
sprintf(buf, "/proc/%u/exe", pid);
|
||||||
if (stat(buf, &st) < 0)
|
if (stat(buf, &st) < 0)
|
||||||
return 0;
|
return 0;
|
||||||
xstat(execname, &execstat);
|
|
||||||
if (st.st_dev == execstat.st_dev
|
if (st.st_dev == execstat.st_dev
|
||||||
&& st.st_ino == execstat.st_ino)
|
&& st.st_ino == execstat.st_ino)
|
||||||
return 1;
|
return 1;
|
||||||
@ -299,6 +300,8 @@ int start_stop_daemon_main(int argc ATTRIBUTE_UNUSED, char **argv)
|
|||||||
if (errno)
|
if (errno)
|
||||||
user_id = xuname2uid(userspec);
|
user_id = xuname2uid(userspec);
|
||||||
}
|
}
|
||||||
|
if (execname)
|
||||||
|
xstat(execname, &execstat);
|
||||||
|
|
||||||
do_procinit(); /* Both start and stop needs to know current processes */
|
do_procinit(); /* Both start and stop needs to know current processes */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user