Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <fcall.h>
4 #include <9pclient.h>
5 #include <ctype.h>
7 CFsys*
8 nsinit(char *name)
9 {
10 char *addr, *ns;
11 int fd;
13 ns = getns();
14 if(ns == nil)
15 return nil;
17 addr = smprint("unix!%s/%s", ns, name);
18 free(ns);
19 if(addr == nil)
20 return nil;
22 fd = dial(addr, 0, 0, 0);
23 if(fd < 0){
24 werrstr("dial %s: %r", addr);
25 free(addr);
26 return nil;
27 }
28 free(addr);
30 fcntl(fd, F_SETFL, FD_CLOEXEC);
31 return fsinit(fd);
32 }
34 CFsys*
35 nsmount(char *name, char *aname)
36 {
37 CFsys *fs;
38 CFid *fid;
40 fs = nsinit(name);
41 if(fs == nil)
42 return nil;
43 if((fid = fsattach(fs, nil, getuser(), aname)) == nil){
44 _fsunmount(fs);
45 return nil;
46 }
47 fssetroot(fs, fid);
48 return fs;
49 }
51 CFid*
52 nsopen(char *name, char *aname, char *fname, int mode)
53 {
54 CFsys *fs;
55 CFid *fid;
57 fs = nsmount(name, aname);
58 if(fs == nil)
59 return nil;
60 fid = fsopen(fs, fname, mode);
61 fsunmount(fs);
62 return fid;
63 }