]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / netbsd-tests / rump / rumpkern / h_server / h_simpleserver.c
1 /*      $NetBSD: h_simpleserver.c,v 1.3 2011/01/14 13:23:15 pooka Exp $ */
2
3 #include <sys/types.h>
4
5 #include <rump/rump.h>
6
7 #include <err.h>
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string.h>
11 #include <unistd.h>
12
13 #include "../../kernspace/kernspace.h"
14
15 #define NOFAIL(e) do { int rv = e; if (rv) err(1, #e); } while (/*CONSTCOND*/0)
16
17 struct {
18         const char *str;
19         void (*dofun)(char *);
20 } actions[] = {
21         { "sendsig", rumptest_sendsig },
22 };
23
24 int
25 main(int argc, char *argv[])
26 {
27         unsigned i;
28         bool match;
29
30         if (argc < 2)
31                 exit(1);
32
33         NOFAIL(rump_daemonize_begin());
34         NOFAIL(rump_init());
35         NOFAIL(rump_init_server(argv[1]));
36         NOFAIL(rump_daemonize_done(RUMP_DAEMONIZE_SUCCESS));
37
38         if (argc > 2) {
39                 char *arg = NULL;
40
41                 if (argc == 4)
42                         arg = argv[3];
43
44                 for (i = 0; i < __arraycount(actions); i++) {
45                         if (strcmp(actions[i].str, argv[2]) == 0) {
46                                 rump_schedule();
47                                 actions[i].dofun(arg);
48                                 rump_unschedule();
49                                 match = true;
50                         }
51                 }
52
53                 if (!match) {
54                         exit(1);
55                 }
56                 pause();
57         } else {
58                 for (;;)
59                         pause();
60         }
61
62         return 0;
63 }