X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=debianutils%2Fstart_stop_daemon.c;h=c8b7fa8f21d912b3cfdb0ef735b350cdcb2359da;hb=9a4100cf53f75356854ce752374babf8135c3f42;hp=07c104baad230e41b3fba7b67285d65887baa20f;hpb=b182e9ad6011909fdb76358431d23d195febaf54;p=oweals%2Fbusybox.git diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c index 07c104baa..c8b7fa8f2 100644 --- a/debianutils/start_stop_daemon.c +++ b/debianutils/start_stop_daemon.c @@ -79,6 +79,7 @@ Misc options: //config: -N|--nicelevel N //applet:IF_START_STOP_DAEMON(APPLET_ODDNAME(start-stop-daemon, start_stop_daemon, BB_DIR_SBIN, BB_SUID_DROP, start_stop_daemon)) +/* not NOEXEC: uses bb_common_bufsiz1 */ //kbuild:lib-$(CONFIG_START_STOP_DAEMON) += start_stop_daemon.o @@ -86,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" @@ -132,18 +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 @@ -409,11 +380,11 @@ static const char start_stop_daemon_longopts[] ALIGN1 = "quiet\0" No_argument "q" "test\0" No_argument "t" "make-pidfile\0" No_argument "m" -#if ENABLE_FEATURE_START_STOP_DAEMON_FANCY +# if ENABLE_FEATURE_START_STOP_DAEMON_FANCY "oknodo\0" No_argument "o" "verbose\0" No_argument "v" "nicelevel\0" Required_argument "N" -#endif +# endif "startas\0" Required_argument "a" "name\0" Required_argument "n" "signal\0" Required_argument "s" @@ -421,10 +392,15 @@ static const char start_stop_daemon_longopts[] ALIGN1 = "chuid\0" Required_argument "c" "exec\0" Required_argument "x" "pidfile\0" Required_argument "p" -#if ENABLE_FEATURE_START_STOP_DAEMON_FANCY +# if ENABLE_FEATURE_START_STOP_DAEMON_FANCY "retry\0" Required_argument "R" -#endif +# endif ; +# define GETOPT32 getopt32long +# define LONGOPTS start_stop_daemon_longopts, +#else +# define GETOPT32 getopt32 +# define LONGOPTS #endif int start_stop_daemon_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; @@ -445,19 +421,18 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv) INIT_G(); -#if ENABLE_FEATURE_START_STOP_DAEMON_LONG_OPTIONS - applet_long_options = start_stop_daemon_longopts; -#endif - - /* -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) /* We accept and ignore -R / --retry */