aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-02-26 16:08:02 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-02-26 16:08:02 +0000
commit04bb2d2d06a87b08743ee997fcd8465bfed809d1 (patch)
tree6429a4149946aade820c3b1ce8a667cfb83fb8f1
parentd4f0b9476af1dc9dc20a1c2ca0bbcf9a16288851 (diff)
downloadbusybox-w32-04bb2d2d06a87b08743ee997fcd8465bfed809d1.tar.gz
busybox-w32-04bb2d2d06a87b08743ee997fcd8465bfed809d1.tar.bz2
busybox-w32-04bb2d2d06a87b08743ee997fcd8465bfed809d1.zip
start_stop_daemon: stop using data/bss
function old new delta start_stop_daemon_main 749 770 +21 do_procinit 184 185 +1 quiet 1 - -1 userspec 4 - -4 user_id 4 - -4 signal_nr 4 - -4 pidfile 4 - -4 found 4 - -4 execname 4 - -4 cmdname 4 - -4 ------------------------------------------------------------------------------ (add/remove: 0/8 grow/shrink: 2/0 up/down: 22/-29) Total: -7 bytes
-rw-r--r--debianutils/start_stop_daemon.c49
1 files changed, 34 insertions, 15 deletions
diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c
index 6860bab6b..6f4b6b2bb 100644
--- a/debianutils/start_stop_daemon.c
+++ b/debianutils/start_stop_daemon.c
@@ -18,20 +18,37 @@
18#define WANT_PIDFILE 1 18#define WANT_PIDFILE 1
19#include "libbb.h" 19#include "libbb.h"
20 20
21static int signal_nr = 15;
22static int user_id = -1;
23static char *userspec;
24static char *cmdname;
25static char *execname;
26static char *pidfile;
27static smallint quiet;
28
29struct pid_list { 21struct pid_list {
30 struct pid_list *next; 22 struct pid_list *next;
31 pid_t pid; 23 pid_t pid;
32}; 24};
33 25
34static struct pid_list *found; 26
27struct globals {
28 struct pid_list *found;
29 char *userspec;
30 char *cmdname;
31 char *execname;
32 char *pidfile;
33 int user_id;
34 smallint quiet;
35 smallint signal_nr;
36};
37#define G (*(struct globals*)&bb_common_bufsiz1)
38#define found (G.found )
39#define userspec (G.userspec )
40#define cmdname (G.cmdname )
41#define execname (G.execname )
42#define pidfile (G.pidfile )
43#define user_id (G.user_id )
44#define quiet (G.quiet )
45#define signal_nr (G.signal_nr )
46#define INIT_G() \
47 do { \
48 user_id = -1; \
49 signal_nr = 15; \
50 } while (0)
51
35 52
36static int pid_is_exec(pid_t pid, const char *name) 53static int pid_is_exec(pid_t pid, const char *name)
37{ 54{
@@ -43,8 +60,8 @@ static int pid_is_exec(pid_t pid, const char *name)
43 n = strlen(name) + 1; 60 n = strlen(name) + 1;
44 execbuf = xzalloc(n + 1); 61 execbuf = xzalloc(n + 1);
45 readlink(buf, execbuf, n); 62 readlink(buf, execbuf, n);
46 63 /* if readlink fails because link target is longer than strlen(name),
47 /* if readlink fails, execbuf still contains "" */ 64 * execbuf still contains "", and strcmp will return !0. */
48 n = strcmp(execbuf, name); 65 n = strcmp(execbuf, name);
49 if (ENABLE_FEATURE_CLEAN_UP) 66 if (ENABLE_FEATURE_CLEAN_UP)
50 free(execbuf); 67 free(execbuf);
@@ -121,7 +138,7 @@ static void do_procinit(void)
121{ 138{
122 DIR *procdir; 139 DIR *procdir;
123 struct dirent *entry; 140 struct dirent *entry;
124 int foundany, pid; 141 int pid;
125 142
126 if (pidfile) { 143 if (pidfile) {
127 do_pidfile(); 144 do_pidfile();
@@ -130,16 +147,15 @@ static void do_procinit(void)
130 147
131 procdir = xopendir("/proc"); 148 procdir = xopendir("/proc");
132 149
133 foundany = 0; 150 pid = 0;
134 while ((entry = readdir(procdir)) != NULL) { 151 while ((entry = readdir(procdir)) != NULL) {
135 pid = bb_strtou(entry->d_name, NULL, 10); 152 pid = bb_strtou(entry->d_name, NULL, 10);
136 if (errno) 153 if (errno)
137 continue; 154 continue;
138 foundany++;
139 check(pid); 155 check(pid);
140 } 156 }
141 closedir(procdir); 157 closedir(procdir);
142 if (!foundany) 158 if (!pid)
143 bb_error_msg_and_die("nothing in /proc - not mounted?"); 159 bb_error_msg_and_die("nothing in /proc - not mounted?");
144} 160}
145 161
@@ -246,6 +262,9 @@ int start_stop_daemon_main(int argc, char **argv)
246// int retries = -1; 262// int retries = -1;
247 char *opt_N; 263 char *opt_N;
248#endif 264#endif
265
266 INIT_G();
267
249#if ENABLE_FEATURE_START_STOP_DAEMON_LONG_OPTIONS 268#if ENABLE_FEATURE_START_STOP_DAEMON_LONG_OPTIONS
250 applet_long_options = start_stop_daemon_longopts; 269 applet_long_options = start_stop_daemon_longopts;
251#endif 270#endif