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(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 }