Blame


1 b3994ec5 2003-12-11 devnull #include <u.h>
2 b3994ec5 2003-12-11 devnull #include <libc.h>
3 b3994ec5 2003-12-11 devnull
4 b3994ec5 2003-12-11 devnull int
5 b3994ec5 2003-12-11 devnull post9pservice(int fd, char *name)
6 b3994ec5 2003-12-11 devnull {
7 b3994ec5 2003-12-11 devnull int i;
8 b3994ec5 2003-12-11 devnull char *ns, *s;
9 b3994ec5 2003-12-11 devnull Waitmsg *w;
10 b3994ec5 2003-12-11 devnull
11 9f95eb6f 2005-07-18 devnull if(strchr(name, '!')) /* assume is already network address */
12 9f95eb6f 2005-07-18 devnull s = strdup(name);
13 9f95eb6f 2005-07-18 devnull else{
14 9f95eb6f 2005-07-18 devnull if((ns = getns()) == nil)
15 9f95eb6f 2005-07-18 devnull return -1;
16 9f95eb6f 2005-07-18 devnull s = smprint("unix!%s/%s", ns, name);
17 9f95eb6f 2005-07-18 devnull free(ns);
18 9f95eb6f 2005-07-18 devnull }
19 b3994ec5 2003-12-11 devnull if(s == nil)
20 b3994ec5 2003-12-11 devnull return -1;
21 05d8c6df 2004-09-23 devnull switch(fork()){
22 b3994ec5 2003-12-11 devnull case -1:
23 b3994ec5 2003-12-11 devnull return -1;
24 b3994ec5 2003-12-11 devnull case 0:
25 b3994ec5 2003-12-11 devnull dup(fd, 0);
26 b3994ec5 2003-12-11 devnull dup(fd, 1);
27 b3994ec5 2003-12-11 devnull for(i=3; i<20; i++)
28 b3994ec5 2003-12-11 devnull close(i);
29 b3994ec5 2003-12-11 devnull execlp("9pserve", "9pserve", "-u", s, (char*)0);
30 b3994ec5 2003-12-11 devnull fprint(2, "exec 9pserve: %r\n");
31 b3994ec5 2003-12-11 devnull _exits("exec");
32 b3994ec5 2003-12-11 devnull default:
33 b3994ec5 2003-12-11 devnull w = wait();
34 005a85f3 2005-01-07 devnull if(w == nil)
35 005a85f3 2005-01-07 devnull return -1;
36 b3994ec5 2003-12-11 devnull close(fd);
37 b3994ec5 2003-12-11 devnull free(s);
38 b3994ec5 2003-12-11 devnull if(w->msg && w->msg[0]){
39 b3994ec5 2003-12-11 devnull free(w);
40 b3994ec5 2003-12-11 devnull werrstr("9pserve failed");
41 b3994ec5 2003-12-11 devnull return -1;
42 b3994ec5 2003-12-11 devnull }
43 b3994ec5 2003-12-11 devnull free(w);
44 b3994ec5 2003-12-11 devnull return 0;
45 b3994ec5 2003-12-11 devnull }
46 b3994ec5 2003-12-11 devnull }