Remove FIFO from sinit - sinit - suckless init | |
git clone git://git.suckless.org/sinit | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit b8cb53193c0d235cec99d70bb63838f27c3c5fda | |
parent c381441b7020aaeea599de9a5569e2be8fb147c6 | |
Author: sin <[email protected]> | |
Date: Fri, 7 Feb 2014 16:15:48 +0000 | |
Remove FIFO from sinit | |
We can just run /bin/rc.shutdown reboot|poweroff etc. | |
It complicates things when rootfs is mounted as ro etc. | |
Diffstat: | |
M config.def.h | 7 ------- | |
M sinit.c | 62 ++---------------------------… | |
2 files changed, 3 insertions(+), 66 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
@@ -3,10 +3,3 @@ | |
static const char *rcinitcmd[] = { "/bin/rc.init", NULL }; | |
static const char *rcrebootcmd[] = { "/bin/rc.shutdown", "reboot", NULL }; | |
static const char *rcpoweroffcmd[] = { "/bin/rc.shutdown", "poweroff", NULL }; | |
- | |
-/* if you make this path NULL, then sinit will not use a FIFO */ | |
-static const char *fifopath = "/var/run/sinit.fifo"; | |
-static Command commands[] = { | |
- { "poweroff", spawn, { .v = rcpoweroffcmd } }, | |
- { "reboot", spawn, { .v = rcrebootcmd } }, | |
-}; | |
diff --git a/sinit.c b/sinit.c | |
@@ -18,12 +18,6 @@ typedef union { | |
const void *v; | |
} Arg; | |
-typedef struct { | |
- const char *name; | |
- void (*func)(const Arg *arg); | |
- const Arg arg; | |
-} Command; | |
- | |
volatile sig_atomic_t signum; | |
typedef struct { | |
@@ -31,20 +25,16 @@ typedef struct { | |
void (*func)(void); | |
} Sigmap; | |
-static void dispatchcmd(int); | |
-static void sigfifo(void); | |
static void sigreap(void); | |
static void sigreboot(void); | |
static void spawn(const Arg *); | |
static Sigmap dispatchsig[] = { | |
- { SIGHUP, sigfifo }, | |
{ SIGCHLD, sigreap }, | |
{ SIGINT, sigreboot }, | |
}; | |
static int sigfd = -1; | |
-static int fifofd = -1; | |
#include "config.h" | |
@@ -53,7 +43,8 @@ main(void) | |
{ | |
struct signalfd_siginfo siginfo; | |
sigset_t sigset; | |
- int maxfd, i, ret; | |
+ int i; | |
+ int ret; | |
ssize_t n; | |
fd_set rfds; | |
@@ -75,13 +66,7 @@ main(void) | |
while (1) { | |
FD_ZERO(&rfds); | |
FD_SET(sigfd, &rfds); | |
- maxfd = sigfd; | |
- if (fifofd != -1) { | |
- FD_SET(fifofd, &rfds); | |
- if (fifofd > maxfd) | |
- maxfd = fifofd; | |
- } | |
- ret = select(maxfd + 1, &rfds, NULL, NULL, NULL); | |
+ ret = select(sigfd + 1, &rfds, NULL, NULL, NULL); | |
if (ret < 0) | |
eprintf("sinit: select:"); | |
if (ret > 0) { | |
@@ -93,9 +78,6 @@ main(void) | |
if (dispatchsig[i].sig == siginfo.ssi_… | |
dispatchsig[i].func(); | |
} | |
- if (fifofd != -1) | |
- if (FD_ISSET(fifofd, &rfds)) | |
- dispatchcmd(fifofd); | |
} | |
} | |
@@ -103,44 +85,6 @@ main(void) | |
} | |
static void | |
-dispatchcmd(int fd) | |
-{ | |
- int i; | |
- char buf[BUFSIZ], *p; | |
- ssize_t n; | |
- | |
- n = read(fd, buf, sizeof(buf) - 1); | |
- if (n < 0) | |
- weprintf("sinit: read:"); | |
- buf[n] = '\0'; | |
- p = strchr(buf, '\n'); | |
- if (p) | |
- *p = '\0'; | |
- for (i = 0; i < LEN(commands); i++) { | |
- if (strcmp(commands[i].name, buf) == 0) { | |
- commands[i].func(&commands[i].arg); | |
- break; | |
- } | |
- } | |
-} | |
- | |
-static void | |
-sigfifo(void) | |
-{ | |
- if (!fifopath) | |
- return; | |
- if (fifofd != -1) | |
- close(fifofd); | |
- unlink(fifopath); | |
- umask(0); | |
- if (mkfifo(fifopath, 0600) < 0) | |
- weprintf("sinit: mkfifo %s:", fifopath); | |
- fifofd = open(fifopath, O_RDWR | O_NONBLOCK); | |
- if (fifofd < 0) | |
- weprintf("sinit: open %s:", fifopath); | |
-} | |
- | |
-static void | |
sigreap(void) | |
{ | |
while (waitpid(-1, NULL, WNOHANG) > 0) |