diff options
-rw-r--r-- | debianutils/start_stop_daemon.c | 42 |
1 files changed, 19 insertions, 23 deletions
diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c index 399f9f5e1..d1f5e94c0 100644 --- a/debianutils/start_stop_daemon.c +++ b/debianutils/start_stop_daemon.c | |||
@@ -194,7 +194,7 @@ static int do_stop(void) | |||
194 | } | 194 | } |
195 | 195 | ||
196 | #if ENABLE_FEATURE_START_STOP_DAEMON_LONG_OPTIONS | 196 | #if ENABLE_FEATURE_START_STOP_DAEMON_LONG_OPTIONS |
197 | static const struct option ssd_long_options[] = { | 197 | static const struct option long_options[] = { |
198 | { "stop", 0, NULL, 'K' }, | 198 | { "stop", 0, NULL, 'K' }, |
199 | { "start", 0, NULL, 'S' }, | 199 | { "start", 0, NULL, 'S' }, |
200 | { "background", 0, NULL, 'b' }, | 200 | { "background", 0, NULL, 'b' }, |
@@ -219,16 +219,16 @@ static const struct option ssd_long_options[] = { | |||
219 | }; | 219 | }; |
220 | #endif | 220 | #endif |
221 | 221 | ||
222 | #define SSD_CTX_STOP 0x1 | 222 | enum { |
223 | #define SSD_CTX_START 0x2 | 223 | CTX_STOP = 0x1, |
224 | #define SSD_OPT_BACKGROUND 0x4 | 224 | CTX_START = 0x2, |
225 | #define SSD_OPT_QUIET 0x8 | 225 | OPT_BACKGROUND = 0x4, |
226 | #define SSD_OPT_MAKEPID 0x10 | 226 | OPT_QUIET = 0x8, |
227 | #if ENABLE_FEATURE_START_STOP_DAEMON_FANCY | 227 | OPT_MAKEPID = 0x10, |
228 | #define SSD_OPT_OKNODO 0x20 | 228 | OPT_OKNODO = 0x20 * ENABLE_FEATURE_START_STOP_DAEMON_FANCY, |
229 | #define SSD_OPT_VERBOSE 0x40 | 229 | OPT_VERBOSE = 0x40 * ENABLE_FEATURE_START_STOP_DAEMON_FANCY, |
230 | #define SSD_OPT_NICELEVEL 0x80 | 230 | OPT_NICELEVEL = 0x80 * ENABLE_FEATURE_START_STOP_DAEMON_FANCY, |
231 | #endif | 231 | }; |
232 | 232 | ||
233 | int start_stop_daemon_main(int argc, char **argv) | 233 | int start_stop_daemon_main(int argc, char **argv) |
234 | { | 234 | { |
@@ -241,7 +241,7 @@ int start_stop_daemon_main(int argc, char **argv) | |||
241 | char *opt_N; | 241 | char *opt_N; |
242 | #endif | 242 | #endif |
243 | #if ENABLE_FEATURE_START_STOP_DAEMON_LONG_OPTIONS | 243 | #if ENABLE_FEATURE_START_STOP_DAEMON_LONG_OPTIONS |
244 | applet_long_options = ssd_long_options; | 244 | applet_long_options = long_options; |
245 | #endif | 245 | #endif |
246 | 246 | ||
247 | /* Check required one context option was given */ | 247 | /* Check required one context option was given */ |
@@ -254,8 +254,7 @@ int start_stop_daemon_main(int argc, char **argv) | |||
254 | // USE_FEATURE_START_STOP_DAEMON_FANCY(,&retry_arg) | 254 | // USE_FEATURE_START_STOP_DAEMON_FANCY(,&retry_arg) |
255 | ,&startas, &cmdname, &signame, &userspec, &chuid, &execname, &pidfile); | 255 | ,&startas, &cmdname, &signame, &userspec, &chuid, &execname, &pidfile); |
256 | 256 | ||
257 | quiet = (opt & SSD_OPT_QUIET) | 257 | quiet = (opt & OPT_QUIET) && !(opt & OPT_VERBOSE); |
258 | USE_FEATURE_START_STOP_DAEMON_FANCY(&& !(opt & SSD_OPT_VERBOSE)); | ||
259 | 258 | ||
260 | if (signame) { | 259 | if (signame) { |
261 | signal_nr = get_signum(signame); | 260 | signal_nr = get_signum(signame); |
@@ -278,11 +277,9 @@ int start_stop_daemon_main(int argc, char **argv) | |||
278 | user_id = bb_xgetpwnam(userspec); | 277 | user_id = bb_xgetpwnam(userspec); |
279 | } | 278 | } |
280 | 279 | ||
281 | if (opt & SSD_CTX_STOP) { | 280 | if (opt & CTX_STOP) { |
282 | int i = do_stop(); | 281 | int i = do_stop(); |
283 | return | 282 | return (opt & OPT_OKNODO) ? 0 : (i<=0); |
284 | USE_FEATURE_START_STOP_DAEMON_FANCY((opt & SSD_OPT_OKNODO) | ||
285 | ? 0 :) !!(i<=0); | ||
286 | } | 283 | } |
287 | 284 | ||
288 | do_procinit(); | 285 | do_procinit(); |
@@ -290,15 +287,14 @@ int start_stop_daemon_main(int argc, char **argv) | |||
290 | if (found) { | 287 | if (found) { |
291 | if (!quiet) | 288 | if (!quiet) |
292 | printf("%s already running\n%d\n", execname, found->pid); | 289 | printf("%s already running\n%d\n", execname, found->pid); |
293 | USE_FEATURE_START_STOP_DAEMON_FANCY(return !(opt & SSD_OPT_OKNODO);) | 290 | return !(opt & OPT_OKNODO); |
294 | SKIP_FEATURE_START_STOP_DAEMON_FANCY(return EXIT_FAILURE;) | ||
295 | } | 291 | } |
296 | *--argv = startas; | 292 | *--argv = startas; |
297 | if (opt & SSD_OPT_BACKGROUND) { | 293 | if (opt & OPT_BACKGROUND) { |
298 | xdaemon(0, 0); | 294 | xdaemon(0, 0); |
299 | setsid(); | 295 | setsid(); |
300 | } | 296 | } |
301 | if (opt & SSD_OPT_MAKEPID) { | 297 | if (opt & OPT_MAKEPID) { |
302 | /* user wants _us_ to make the pidfile */ | 298 | /* user wants _us_ to make the pidfile */ |
303 | FILE *pidf = xfopen(pidfile, "w"); | 299 | FILE *pidf = xfopen(pidfile, "w"); |
304 | 300 | ||
@@ -313,7 +309,7 @@ int start_stop_daemon_main(int argc, char **argv) | |||
313 | xsetuid(user_id); | 309 | xsetuid(user_id); |
314 | } | 310 | } |
315 | #if ENABLE_FEATURE_START_STOP_DAEMON_FANCY | 311 | #if ENABLE_FEATURE_START_STOP_DAEMON_FANCY |
316 | if (opt & SSD_OPT_NICELEVEL) { | 312 | if (opt & OPT_NICELEVEL) { |
317 | /* Set process priority */ | 313 | /* Set process priority */ |
318 | int prio = getpriority(PRIO_PROCESS, 0) + xatoi_range(opt_N, INT_MIN/2, INT_MAX/2); | 314 | int prio = getpriority(PRIO_PROCESS, 0) + xatoi_range(opt_N, INT_MIN/2, INT_MAX/2); |
319 | if (setpriority(PRIO_PROCESS, 0, prio) < 0) { | 315 | if (setpriority(PRIO_PROCESS, 0, prio) < 0) { |