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 #include <fcall.h>
4 b3994ec5 2003-12-11 devnull #include <fs.h>
5 b3994ec5 2003-12-11 devnull #include <ctype.h>
6 b3994ec5 2003-12-11 devnull
7 b3994ec5 2003-12-11 devnull Fsys*
8 b3994ec5 2003-12-11 devnull nsmount(char *name, char *aname)
9 b3994ec5 2003-12-11 devnull {
10 b3994ec5 2003-12-11 devnull char *addr, *ns;
11 b3994ec5 2003-12-11 devnull int fd;
12 b3994ec5 2003-12-11 devnull Fsys *fs;
13 b3994ec5 2003-12-11 devnull
14 b3994ec5 2003-12-11 devnull ns = getns();
15 b3994ec5 2003-12-11 devnull if(ns == nil)
16 b3994ec5 2003-12-11 devnull return nil;
17 b3994ec5 2003-12-11 devnull
18 b3994ec5 2003-12-11 devnull addr = smprint("unix!%s/%s", ns, name);
19 b3994ec5 2003-12-11 devnull free(ns);
20 b3994ec5 2003-12-11 devnull if(addr == nil)
21 b3994ec5 2003-12-11 devnull return nil;
22 b3994ec5 2003-12-11 devnull
23 b3994ec5 2003-12-11 devnull fd = dial(addr, 0, 0, 0);
24 b3994ec5 2003-12-11 devnull if(fd < 0){
25 b3994ec5 2003-12-11 devnull werrstr("dial %s: %r", addr);
26 1a8f27c3 2004-05-14 devnull free(addr);
27 b3994ec5 2003-12-11 devnull return nil;
28 b3994ec5 2003-12-11 devnull }
29 1a8f27c3 2004-05-14 devnull free(addr);
30 1a8f27c3 2004-05-14 devnull
31 49588d5d 2003-12-17 devnull fcntl(fd, F_SETFL, FD_CLOEXEC);
32 b3994ec5 2003-12-11 devnull
33 b3994ec5 2003-12-11 devnull fs = fsmount(fd, aname);
34 b3994ec5 2003-12-11 devnull if(fs == nil){
35 b3994ec5 2003-12-11 devnull close(fd);
36 b3994ec5 2003-12-11 devnull return nil;
37 b3994ec5 2003-12-11 devnull }
38 b3994ec5 2003-12-11 devnull
39 b3994ec5 2003-12-11 devnull return fs;
40 b3994ec5 2003-12-11 devnull }