1 b3994ec5 2003-12-11 devnull #include <u.h>
2 b3994ec5 2003-12-11 devnull #include <libc.h>
4 118dfa98 2008-05-06 rsc int chattyfuse;
7 118dfa98 2008-05-06 rsc post9pservice(int fd, char *name, char *mtpt)
10 118dfa98 2008-05-06 rsc char *ns, *addr;
11 b3994ec5 2003-12-11 devnull Waitmsg *w;
13 118dfa98 2008-05-06 rsc if(name == nil && mtpt == nil){
15 118dfa98 2008-05-06 rsc werrstr("nothing to do");
16 b3994ec5 2003-12-11 devnull return -1;
20 118dfa98 2008-05-06 rsc if(strchr(name, '!')) /* assume is already network address */
21 118dfa98 2008-05-06 rsc addr = strdup(name);
23 118dfa98 2008-05-06 rsc if((ns = getns()) == nil)
25 118dfa98 2008-05-06 rsc addr = smprint("unix!%s/%s", ns, name);
28 118dfa98 2008-05-06 rsc if(addr == nil)
29 005a85f3 2005-01-07 devnull return -1;
30 118dfa98 2008-05-06 rsc switch(pid = fork()){
36 118dfa98 2008-05-06 rsc for(i=3; i<20; i++)
38 118dfa98 2008-05-06 rsc execlp("9pserve", "9pserve", "-u", addr, (char*)0);
39 118dfa98 2008-05-06 rsc fprint(2, "exec 9pserve: %r\n");
40 118dfa98 2008-05-06 rsc _exits("exec");
42 b3994ec5 2003-12-11 devnull close(fd);
43 118dfa98 2008-05-06 rsc w = waitfor(pid);
46 b3994ec5 2003-12-11 devnull if(w->msg && w->msg[0]){
48 b3994ec5 2003-12-11 devnull werrstr("9pserve failed");
49 b3994ec5 2003-12-11 devnull return -1;
54 118dfa98 2008-05-06 rsc if((fd = dial(addr, nil, nil, nil)) < 0){
55 118dfa98 2008-05-06 rsc werrstr("cannot reopen for mount: %r");
62 118dfa98 2008-05-06 rsc switch(pid = rfork(RFFDG|RFPROC|RFNOWAIT)){
67 118dfa98 2008-05-06 rsc for(i=3; i<20; i++)
70 3e4ceac7 2008-06-19 rsc /* Try v9fs on Linux, which will mount 9P directly. */
71 3e4ceac7 2008-06-19 rsc execlp("mount9p", "mount9p", "-", mtpt, (char*)0);
73 118dfa98 2008-05-06 rsc if(chattyfuse)
74 118dfa98 2008-05-06 rsc execlp("9pfuse", "9pfuse", "-D", "-", mtpt, (char*)0);
76 118dfa98 2008-05-06 rsc execlp("9pfuse", "9pfuse", "-", mtpt, (char*)0);
77 118dfa98 2008-05-06 rsc fprint(2, "exec 9pfuse: %r\n");
78 118dfa98 2008-05-06 rsc _exits("exec");