diff options
author | sin <sin@2f30.org> | 2014-02-06 12:01:00 +0000 |
---|---|---|
committer | sin <sin@2f30.org> | 2014-02-06 12:01:00 +0000 |
commit | 5ab9c1c10322a4db21349555d901646259d26d6f (patch) | |
tree | 98fa9daeb9b51b585dd9b72e612e1a1249f66755 | |
parent | 2273a1fca05b14f2cabbf212d9b3a4247520fe2e (diff) |
Factor out the rc commands
-rw-r--r-- | config.def.h | 11 | ||||
-rw-r--r-- | sinit.c | 24 | ||||
-rw-r--r-- | util.h | 1 | ||||
-rw-r--r-- | util/eprintf.c | 1 |
4 files changed, 17 insertions, 20 deletions
diff --git a/config.def.h b/config.def.h index 050d7e0..a257b45 100644 --- a/config.def.h +++ b/config.def.h @@ -1,6 +1,13 @@ /* See LICENSE file for copyright and license details. */ + +static const char *rcinitcmd[] = { "/bin/rc.init", NULL }; +static Arg rcinitarg = { .v = rcinitcmd }; + +static const char *rcrebootcmd[] = { "/bin/rc.shutdown", "reboot", NULL }; +static const char *rcpoweroffcmd[] = { "/bin/rc.shutdown", "poweroff", NULL }; + static const char *fifopath = "/var/run/sinit.fifo"; static Command commands[] = { - { "poweroff", cmdpoweroff, {0} }, - { "reboot", cmdreboot, {0} }, + { "poweroff", spawn, { .v = rcpoweroffcmd } }, + { "reboot", spawn, { .v = rcrebootcmd } }, }; @@ -1,4 +1,5 @@ /* See LICENSE file for copyright and license details. */ + #include <err.h> #include <errno.h> #include <fcntl.h> @@ -23,10 +24,8 @@ typedef struct { const Arg arg; } Command; -static void cmdpoweroff(const Arg *); -static void cmdreboot(const Arg *); static void dispatchcmd(int); -static void spawn(const char *, char *const []); +static void spawn(const Arg *); #include "config.h" @@ -53,7 +52,7 @@ main(void) sigprocmask(SIG_UNBLOCK, &set, 0); - spawn("/bin/rc.init", (char *[]){ "rc.init", NULL }); + spawn(&rcinitarg); unlink(fifopath); umask(0); @@ -79,18 +78,6 @@ main(void) } static void -cmdpoweroff(const Arg *arg) -{ - spawn("/bin/rc.shutdown", (char *[]) { "rc", "poweroff", NULL }); -} - -static void -cmdreboot(const Arg *arg) -{ - spawn("/bin/rc.shutdown", (char *[]) { "rc", "reboot", NULL }); -} - -static void dispatchcmd(int fd) { int i; @@ -113,9 +100,10 @@ dispatchcmd(int fd) } static void -spawn(const char *file, char *const argv[]) +spawn(const Arg *arg) { pid_t pid; + const char *p = arg->v; pid = fork(); if (pid < 0) @@ -123,7 +111,7 @@ spawn(const char *file, char *const argv[]) if (pid == 0) { setsid(); setpgid(0, 0); - execvp(file, argv); + execvp(p, arg->v); _exit(errno == ENOENT ? 127 : 126); } } @@ -1,4 +1,5 @@ /* See LICENSE file for copyright and license details. */ + #define LEN(x) (sizeof (x) / sizeof *(x)) void enprintf(int, const char *, ...); diff --git a/util/eprintf.c b/util/eprintf.c index af05686..8dda0c8 100644 --- a/util/eprintf.c +++ b/util/eprintf.c @@ -1,4 +1,5 @@ /* See LICENSE file for copyright and license details. */ + #include <stdarg.h> #include <stdio.h> #include <stdlib.h> |