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;
14 s = smprint("unix!%s/%s", ns, name);
15 free(ns);
16 if(s == nil)
17 return -1;
18 switch(fork()){
19 case -1:
20 return -1;
21 case 0:
22 dup(fd, 0);
23 dup(fd, 1);
24 for(i=3; i<20; i++)
25 close(i);
26 execlp("9pserve", "9pserve", "-u", s, (char*)0);
27 fprint(2, "exec 9pserve: %r\n");
28 _exits("exec");
29 default:
30 w = wait();
31 if(w == nil)
32 return -1;
33 close(fd);
34 free(s);
35 if(w->msg && w->msg[0]){
36 free(w);
37 werrstr("9pserve failed");
38 return -1;
39 }
40 free(w);
41 return 0;
42 }
43 }