|
|
1.1 root 1: /* usage: dispatch <ipc args> */
2: /* TODO: connect input to /dev/null if peer wants no output,
3: connect output to logfile if peer wants no input. */
4:
5: #include <ipc.h>
6: #include <string.h>
7: #include "../paths.h"
8:
9: int
10: main(int argc, char *argv[])
11: {
12: char c, d;
13: char *args[4];
14: int fd;
15:
16: if (chdir(LDIR) < 0)
17: return 1;
18:
19: (args[1] = strchr(argv[1], '=')) && ++args[1];
20: (args[2] = strchr(argv[2], '=')) && ++args[2];
21: args[3] = 0;
22:
23: if (read(0, &c, 1) != 1)
24: return 1;
25: do
26: if (read(0, &d, 1) != 1)
27: return 1;
28: while (d);
29:
30: fd = open("/dev/null", 1);
31: dup2(fd, 2);
32: if (fd > 2)
33: close(fd);
34:
35: switch (c) {
36: case 's':
37: args[0] = "showq";
38: execv("showq", args);
39: break;
40: case 't':
41: args[0] = "transmit";
42: execv("transmit", args);
43: break;
44: case 'n':
45: args[0] = "notice";
46: execv("notice", args);
47: break;
48: }
49:
50: return 1;
51: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.