Blob
1 #include <u.h>2 #include <libc.h>4 int5 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 }