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