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 werrstr("no name space");16 return nil;17 }19 addr = smprint("unix!%s/%s", ns, name);20 free(ns);21 if(addr == nil){22 werrstr("smprint: %r");23 return nil;24 }26 fd = dial(addr, 0, 0, 0);27 if(fd < 0){28 werrstr("dial %s: %r", addr);29 free(addr);30 return nil;31 }32 free(addr);34 fcntl(fd, F_SETFD, FD_CLOEXEC);35 return fsinit(fd);36 }38 CFsys*39 nsmount(char *name, char *aname)40 {41 CFsys *fs;42 CFid *fid;44 fs = nsinit(name);45 if(fs == nil)46 return nil;47 if((fid = fsattach(fs, nil, getuser(), aname)) == nil){48 _fsunmount(fs);49 return nil;50 }51 fssetroot(fs, fid);52 return fs;53 }55 CFid*56 nsopen(char *name, char *aname, char *fname, int mode)57 {58 CFsys *fs;59 CFid *fid;61 fs = nsmount(name, aname);62 if(fs == nil)63 return nil;64 fid = fsopen(fs, fname, mode);65 fsunmount(fs);66 return fid;67 }