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 }