diff options
author | Eric Andersen <andersen@codepoet.org> | 2003-07-26 09:10:35 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2003-07-26 09:10:35 +0000 |
commit | aa820dbc00860a2ddcb7a0205345ffe39c7d18d7 (patch) | |
tree | afcf51f2d16340d0cf2b61ef5b7ec2a9b0ac798f /debianutils | |
parent | 480f1533f3f0355089c4e5abc9038d3097d06ab8 (diff) | |
download | busybox-w32-aa820dbc00860a2ddcb7a0205345ffe39c7d18d7.tar.gz busybox-w32-aa820dbc00860a2ddcb7a0205345ffe39c7d18d7.tar.bz2 busybox-w32-aa820dbc00860a2ddcb7a0205345ffe39c7d18d7.zip |
cleanup and add long options
Diffstat (limited to 'debianutils')
-rw-r--r-- | debianutils/start_stop_daemon.c | 100 |
1 files changed, 41 insertions, 59 deletions
diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c index a1c2c21c2..482078e6e 100644 --- a/debianutils/start_stop_daemon.c +++ b/debianutils/start_stop_daemon.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <sys/stat.h> | 16 | #include <sys/stat.h> |
17 | #include <dirent.h> | 17 | #include <dirent.h> |
18 | #include <unistd.h> | 18 | #include <unistd.h> |
19 | #include <getopt.h> | ||
19 | 20 | ||
20 | #include "busybox.h" | 21 | #include "busybox.h" |
21 | #include "pwd_.h" | 22 | #include "pwd_.h" |
@@ -25,8 +26,8 @@ static int stop = 0; | |||
25 | static int fork_before_exec = 0; | 26 | static int fork_before_exec = 0; |
26 | static int signal_nr = 15; | 27 | static int signal_nr = 15; |
27 | static int user_id = -1; | 28 | static int user_id = -1; |
28 | static const char *userspec = NULL; | 29 | static char *userspec = NULL; |
29 | static const char *cmdname = NULL; | 30 | static char *cmdname = NULL; |
30 | static char *execname = NULL; | 31 | static char *execname = NULL; |
31 | static char *startas = NULL; | 32 | static char *startas = NULL; |
32 | 33 | ||
@@ -48,62 +49,6 @@ push(int pid) | |||
48 | found = p; | 49 | found = p; |
49 | } | 50 | } |
50 | 51 | ||
51 | |||
52 | static void | ||
53 | parse_options(int argc, char * const *argv) | ||
54 | { | ||
55 | |||
56 | int c; | ||
57 | |||
58 | for (;;) { | ||
59 | c = getopt (argc, argv, "a:n:s:u:x:KSb"); | ||
60 | if (c == EOF) | ||
61 | break; | ||
62 | switch (c) { | ||
63 | case 'K': | ||
64 | stop = 1; | ||
65 | break; | ||
66 | case 'S': | ||
67 | start = 1; | ||
68 | break; | ||
69 | case 'a': | ||
70 | startas = optarg; | ||
71 | break; | ||
72 | case 'n': | ||
73 | cmdname = optarg; | ||
74 | break; | ||
75 | case 's': | ||
76 | if (sscanf(optarg, "%d", &signal_nr) != 1) | ||
77 | bb_error_msg_and_die ("-s takes a numeric argument"); | ||
78 | break; | ||
79 | case 'u': | ||
80 | userspec = optarg; | ||
81 | break; | ||
82 | case 'x': | ||
83 | execname = optarg; | ||
84 | break; | ||
85 | case 'b': | ||
86 | fork_before_exec = 1; | ||
87 | break; | ||
88 | default: | ||
89 | bb_show_usage(); | ||
90 | } | ||
91 | } | ||
92 | |||
93 | if (start == stop) | ||
94 | bb_error_msg_and_die ("need one of -S or -K"); | ||
95 | |||
96 | if (!execname && !userspec) | ||
97 | bb_error_msg_and_die ("need at least one of -x or -u"); | ||
98 | |||
99 | if (!startas) | ||
100 | startas = execname; | ||
101 | |||
102 | if (start && !startas) | ||
103 | bb_error_msg_and_die ("-S needs -x or -a"); | ||
104 | } | ||
105 | |||
106 | |||
107 | static int | 52 | static int |
108 | pid_is_exec(int pid, const char *exec) | 53 | pid_is_exec(int pid, const char *exec) |
109 | { | 54 | { |
@@ -238,10 +183,47 @@ do_stop(void) | |||
238 | } | 183 | } |
239 | 184 | ||
240 | 185 | ||
186 | static const struct option ssd_long_options[] = { | ||
187 | { "stop", 0, NULL, 'K' }, | ||
188 | { "start", 0, NULL, 'S' }, | ||
189 | { "background", 0, NULL, 'b' }, | ||
190 | { "startas", 1, NULL, 'a' }, | ||
191 | { "name", 1, NULL, 'n' }, | ||
192 | { "signal", 1, NULL, 's' }, | ||
193 | { "user", 1, NULL, 'u' }, | ||
194 | { "exec", 1, NULL, 'x' }, | ||
195 | { 0, 0, 0, 0 } | ||
196 | }; | ||
197 | |||
241 | int | 198 | int |
242 | start_stop_daemon_main(int argc, char **argv) | 199 | start_stop_daemon_main(int argc, char **argv) |
243 | { | 200 | { |
244 | parse_options(argc, argv); | 201 | int flags; |
202 | char *signame; | ||
203 | bb_applet_long_options = ssd_long_options; | ||
204 | |||
205 | flags = bb_getopt_ulflags(argc, argv, "KSba:n:s:u:x:", | ||
206 | &startas, &cmdname, &signame, &userspec, &execname); | ||
207 | |||
208 | /* Be sneaky and avoid branching */ | ||
209 | stop = (flags & 1); | ||
210 | start = (flags & 2); | ||
211 | fork_before_exec = (flags & 4); | ||
212 | |||
213 | signal_nr = bb_xgetlarg(signame, 10, 0, NSIG); | ||
214 | |||
215 | if (start == stop) | ||
216 | bb_error_msg_and_die ("need exactly one of -S or -K"); | ||
217 | |||
218 | if (!execname && !userspec) | ||
219 | bb_error_msg_and_die ("need at least one of -x or -u"); | ||
220 | |||
221 | if (!startas) | ||
222 | startas = execname; | ||
223 | |||
224 | if (start && !startas) | ||
225 | bb_error_msg_and_die ("-S needs -x or -a"); | ||
226 | |||
245 | argc -= optind; | 227 | argc -= optind; |
246 | argv += optind; | 228 | argv += optind; |
247 | 229 | ||