Blame


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