root/tests/rump/rumpkern/h_server/h_simpleserver.c
/*      $NetBSD: h_simpleserver.c,v 1.4 2016/01/25 12:21:42 pooka Exp $ */

#include <sys/types.h>

#include <rump/rump.h>

#include <err.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "../../kernspace/kernspace.h"

#define NOFAIL(e) do { int rv = e; if (rv) err(1, #e); } while (/*CONSTCOND*/0)

struct {
        const char *str;
        void (*dofun)(char *);
} actions[] = {
        { "sendsig", rumptest_sendsig },
};

int
main(int argc, char *argv[])
{
        unsigned i;
        bool match;

        if (argc < 2)
                exit(1);

        NOFAIL(rump_daemonize_begin());
        NOFAIL(rump_init());
        NOFAIL(rump_init_server(argv[1]));
        NOFAIL(rump_daemonize_done(RUMP_DAEMONIZE_SUCCESS));

        if (argc > 2) {
                char *arg = NULL;

                if (argc == 4)
                        arg = argv[3];

                for (i = 0; i < __arraycount(actions); i++) {
                        if (strcmp(actions[i].str, argv[2]) == 0) {
                                rump_schedule();
                                actions[i].dofun(arg);
                                rump_unschedule();
                                match = true;
                        }
                }

                if (!match) {
                        exit(1);
                }
                pause();
        } else {
                for (;;)
                        pause();
        }

        return 0;
}