Factor out the rc commands - sinit - suckless init | |
git clone git://git.suckless.org/sinit | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 5ab9c1c10322a4db21349555d901646259d26d6f | |
parent 2273a1fca05b14f2cabbf212d9b3a4247520fe2e | |
Author: sin <[email protected]> | |
Date: Thu, 6 Feb 2014 12:01:00 +0000 | |
Factor out the rc commands | |
Diffstat: | |
M config.def.h | 11 +++++++++-- | |
M sinit.c | 24 ++++++------------------ | |
M util.h | 1 + | |
M util/eprintf.c | 1 + | |
4 files changed, 17 insertions(+), 20 deletions(-) | |
--- | |
diff --git 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 } }, | |
}; | |
diff --git a/sinit.c b/sinit.c | |
@@ -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); | |
} | |
} | |
diff --git a/util.h b/util.h | |
@@ -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 | |
@@ -1,4 +1,5 @@ | |
/* See LICENSE file for copyright and license details. */ | |
+ | |
#include <stdarg.h> | |
#include <stdio.h> | |
#include <stdlib.h> |