Factor out the rc commands - sinit - suckless init
 (HTM) git clone git://git.suckless.org/sinit
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 5ab9c1c10322a4db21349555d901646259d26d6f
 (DIR) parent 2273a1fca05b14f2cabbf212d9b3a4247520fe2e
 (HTM) Author: sin <sin@2f30.org>
       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(-)
       ---
 (DIR) 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   } },
        };
 (DIR) 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);
                }
        }
 (DIR) 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 *, ...);
 (DIR) 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>