Blob


1 #include <u.h>
2 #include <libc.h>
4 int
5 post9pservice(int fd, char *name)
6 {
7 int i;
8 char *ns, *s;
9 Waitmsg *w;
11 if((ns = getns()) == nil)
12 return -1;
13 s = smprint("unix!%s/%s", ns, name);
14 free(ns);
15 if(s == nil)
16 return -1;
17 switch(rfork(RFPROC|RFFDG)){
18 case -1:
19 return -1;
20 case 0:
21 dup(fd, 0);
22 dup(fd, 1);
23 for(i=3; i<20; i++)
24 close(i);
25 execlp("9pserve", "9pserve", "-u", s, (char*)0);
26 fprint(2, "exec 9pserve: %r\n");
27 _exits("exec");
28 default:
29 w = wait();
30 close(fd);
31 free(s);
32 if(w->msg && w->msg[0]){
33 free(w);
34 werrstr("9pserve failed");
35 return -1;
36 }
37 free(w);
38 return 0;
39 }
40 }