udhcpc: code shrink
[oweals/busybox.git] / debianutils / start_stop_daemon.c
index 45c277a5316545717302a0aab7ea624c5d1eacdd..43b6fca260429187d758733d334ec09818cea049 100644 (file)
@@ -87,44 +87,15 @@ Misc options:
 //usage:       "[OPTIONS] [-S|-K] ... [-- ARGS...]"
 //usage:#define start_stop_daemon_full_usage "\n\n"
 //usage:       "Search for matching processes, and then\n"
-//usage:       "-K: stop all matching processes.\n"
-//usage:       "-S: start a process unless a matching process is found.\n"
-//usage:       IF_FEATURE_START_STOP_DAEMON_LONG_OPTIONS(
-//usage:     "\nProcess matching:"
-//usage:     "\n       -u,--user USERNAME|UID  Match only this user's processes"
-//usage:     "\n       -n,--name NAME          Match processes with NAME"
-//usage:     "\n                               in comm field in /proc/PID/stat"
-//usage:     "\n       -x,--exec EXECUTABLE    Match processes with this command"
-//usage:     "\n                               in /proc/PID/{exe,cmdline}"
-//usage:     "\n       -p,--pidfile FILE       Match a process with PID from the file"
-//usage:     "\n       All specified conditions must match"
-//usage:     "\n-S only:"
-//usage:     "\n       -x,--exec EXECUTABLE    Program to run"
-//usage:     "\n       -a,--startas NAME       Zeroth argument"
-//usage:     "\n       -b,--background         Background"
-//usage:       IF_FEATURE_START_STOP_DAEMON_FANCY(
-//usage:     "\n       -N,--nicelevel N        Change nice level"
-//usage:       )
-//usage:     "\n       -c,--chuid USER[:[GRP]] Change to user/group"
-//usage:     "\n       -m,--make-pidfile       Write PID to the pidfile specified by -p"
-//usage:     "\n-K only:"
-//usage:     "\n       -s,--signal SIG         Signal to send"
-//usage:     "\n       -t,--test               Match only, exit with 0 if a process is found"
-//usage:     "\nOther:"
-//usage:       IF_FEATURE_START_STOP_DAEMON_FANCY(
-//usage:     "\n       -o,--oknodo             Exit with status 0 if nothing is done"
-//usage:     "\n       -v,--verbose            Verbose"
-//usage:       )
-//usage:     "\n       -q,--quiet              Quiet"
-//usage:       )
-//usage:       IF_NOT_FEATURE_START_STOP_DAEMON_LONG_OPTIONS(
+//usage:       "-K: stop all matching processes\n"
+//usage:       "-S: start a process unless a matching process is found\n"
 //usage:     "\nProcess matching:"
 //usage:     "\n       -u USERNAME|UID Match only this user's processes"
 //usage:     "\n       -n NAME         Match processes with NAME"
 //usage:     "\n                       in comm field in /proc/PID/stat"
 //usage:     "\n       -x EXECUTABLE   Match processes with this command"
 //usage:     "\n                       command in /proc/PID/cmdline"
-//usage:     "\n       -p FILE         Match a process with PID from the file"
+//usage:     "\n       -p FILE         Match a process with PID from FILE"
 //usage:     "\n       All specified conditions must match"
 //usage:     "\n-S only:"
 //usage:     "\n       -x EXECUTABLE   Program to run"
@@ -133,20 +104,17 @@ Misc options:
 //usage:       IF_FEATURE_START_STOP_DAEMON_FANCY(
 //usage:     "\n       -N N            Change nice level"
 //usage:       )
-//usage:     "\n       -c USER[:[GRP]] Change to user/group"
-//usage:     "\n       -m              Write PID to the pidfile specified by -p"
+//usage:     "\n       -c USER[:[GRP]] Change user/group"
+//usage:     "\n       -m              Write PID to pidfile specified by -p"
 //usage:     "\n-K only:"
 //usage:     "\n       -s SIG          Signal to send"
-//usage:     "\n       -t              Match only, exit with 0 if a process is found"
+//usage:     "\n       -t              Match only, exit with 0 if found"
 //usage:     "\nOther:"
 //usage:       IF_FEATURE_START_STOP_DAEMON_FANCY(
 //usage:     "\n       -o              Exit with status 0 if nothing is done"
 //usage:     "\n       -v              Verbose"
 //usage:       )
 //usage:     "\n       -q              Quiet"
-//usage:       )
-
-#include <sys/resource.h>
 
 /* Override ENABLE_FEATURE_PIDFILE */
 #define WANT_PIDFILE 1
@@ -189,6 +157,9 @@ struct globals {
        unsigned execname_sizeof;
        int user_id;
        smallint signal_nr;
+#ifdef OLDER_VERSION_OF_X
+       struct stat execstat;
+#endif
 } FIX_ALIASING;
 #define G (*(struct globals*)bb_common_bufsiz1)
 #define userspec          (G.userspec            )
@@ -216,13 +187,12 @@ static int pid_is_exec(pid_t pid)
        sprintf(buf, "/proc/%u/exe", (unsigned)pid);
        if (stat(buf, &st) < 0)
                return 0;
-       if (st.st_dev == execstat.st_dev
-        && st.st_ino == execstat.st_ino)
+       if (st.st_dev == G.execstat.st_dev
+        && st.st_ino == G.execstat.st_ino)
                return 1;
        return 0;
 }
-#endif
-
+#else
 static int pid_is_exec(pid_t pid)
 {
        ssize_t bytes;
@@ -246,6 +216,7 @@ static int pid_is_exec(pid_t pid)
        }
        return 0;
 }
+#endif
 
 static int pid_is_name(pid_t pid)
 {
@@ -440,9 +411,6 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
        char *signame;
        char *startas;
        char *chuid;
-#ifdef OLDER_VERSION_OF_X
-       struct stat execstat;
-#endif
 #if ENABLE_FEATURE_START_STOP_DAEMON_FANCY
 //     char *retry_arg = NULL;
 //     int retries = -1;
@@ -451,15 +419,17 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
 
        INIT_G();
 
-       /* -K or -S is required; they are mutually exclusive */
-       /* -p is required if -m is given */
-       /* -xpun (at least one) is required if -K is given */
-       /* -xa (at least one) is required if -S is given */
-       /* -q turns off -v */
-       opt_complementary = "K:S:K--S:S--K:m?p:K?xpun:S?xa"
-               IF_FEATURE_START_STOP_DAEMON_FANCY("q-v");
-       opt = GETOPT32(argv, "KSbqtma:n:s:u:c:x:p:"
-               IF_FEATURE_START_STOP_DAEMON_FANCY("ovN:R:"),
+       opt = GETOPT32(argv, "^"
+               "KSbqtma:n:s:u:c:x:p:"
+               IF_FEATURE_START_STOP_DAEMON_FANCY("ovN:R:")
+                       /* -K or -S is required; they are mutually exclusive */
+                       /* -p is required if -m is given */
+                       /* -xpun (at least one) is required if -K is given */
+                       /* -xa (at least one) is required if -S is given */
+                       /* -q turns off -v */
+                       "\0"
+                       "K:S:K--S:S--K:m?p:K?xpun:S?xa"
+                       IF_FEATURE_START_STOP_DAEMON_FANCY("q-v"),
                LONGOPTS
                &startas, &cmdname, &signame, &userspec, &chuid, &execname, &pidfile
                IF_FEATURE_START_STOP_DAEMON_FANCY(,&opt_N)
@@ -509,7 +479,7 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
 
 #ifdef OLDER_VERSION_OF_X
        if (execname)
-               xstat(execname, &execstat);
+               xstat(execname, &G.execstat);
 #endif
 
        *--argv = startas;