Introduction
Introduction Statistics Contact Development Disclaimer Help
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>
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.