]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/srvfs.c
audiohda: fix syntax error
[plan9front.git] / sys / src / cmd / srvfs.c
1 #include <u.h>
2 #include <libc.h>
3
4 static void
5 usage(void)
6 {
7         fprint(2, "usage: %s [-dR] [-p perm] [-P patternfile] [-e exportfs] srvname path\n", argv0);
8         exits("usage");
9 }
10
11 void
12 main(int argc, char **argv)
13 {
14         char *ename, *arglist[16], **argp;
15         int fd, pipefd[2];
16         char buf[64];
17         int perm = 0600;
18
19         argp = arglist;
20         ename = "/bin/exportfs";
21         *argp++ = "exportfs";
22         ARGBEGIN{
23         default:
24                 usage();
25         case 'd':
26                 *argp++ = "-d";
27                 break;
28         case 'e':
29                 ename = EARGF(usage());
30                 break;
31         case 'p':
32                 perm = strtol(EARGF(usage()), 0, 8);
33                 break;
34         case 'P':
35                 *argp++ = "-P";
36                 *argp++ = EARGF(usage());
37                 break;
38         case 'R':
39                 *argp++ = "-R";
40                  break;
41         }ARGEND
42         if(argc != 2)
43                 usage();
44         *argp++ = "-r";
45         *argp++ = argv[1];
46         *argp = 0;
47
48         if(pipe(pipefd) < 0){
49                 fprint(2, "can't pipe: %r\n");
50                 exits("pipe");
51         }
52         if(argv[0][0] == '/')
53                 strecpy(buf, buf+sizeof buf, argv[0]);
54         else
55                 snprint(buf, sizeof buf, "/srv/%s", argv[0]);
56         fd = create(buf, OWRITE|ORCLOSE, perm);
57         if(fd < 0){
58                 fprint(2, "can't create %s: %r\n", buf);
59                 exits("create");
60         }
61         fprint(fd, "%d", pipefd[1]);
62         close(pipefd[1]);
63
64         switch(rfork(RFPROC|RFNOWAIT|RFNOTEG|RFFDG)){
65         case -1:
66                 fprint(2, "can't rfork: %r\n");
67                 exits("rfork");
68         case 0:
69                 dup(pipefd[0], 0);
70                 dup(pipefd[0], 1);
71                 close(pipefd[0]);
72                 exec(ename, arglist);
73                 fprint(2, "can't exec exportfs: %r\n");
74                 exits("exec");
75         default:
76                 break;
77         }
78         exits(0);
79 }