diff options
Diffstat (limited to 'src/lib9/post9p.c')
-rw-r--r-- | src/lib9/post9p.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/lib9/post9p.c b/src/lib9/post9p.c new file mode 100644 index 00000000..35ba3167 --- /dev/null +++ b/src/lib9/post9p.c @@ -0,0 +1,40 @@ +#include <u.h> +#include <libc.h> + +int +post9pservice(int fd, char *name) +{ + int i; + char *ns, *s; + Waitmsg *w; + + if((ns = getns()) == nil) + return -1; + s = smprint("unix!%s/%s", ns, name); + free(ns); + if(s == nil) + return -1; + switch(rfork(RFPROC|RFFDG)){ + case -1: + return -1; + case 0: + dup(fd, 0); + dup(fd, 1); + for(i=3; i<20; i++) + close(i); + execlp("9pserve", "9pserve", "-u", s, (char*)0); + fprint(2, "exec 9pserve: %r\n"); + _exits("exec"); + default: + w = wait(); + close(fd); + free(s); + if(w->msg && w->msg[0]){ + free(w); + werrstr("9pserve failed"); + return -1; + } + free(w); + return 0; + } +} |