#include #include #include #include <9pclient.h> #include CFsys* nsinit(char *name) { char *addr, *ns; int fd; ns = getns(); if(ns == nil){ werrstr("no name space"); return nil; } addr = smprint("unix!%s/%s", ns, name); free(ns); if(addr == nil){ werrstr("smprint: %r"); return nil; } fd = dial(addr, 0, 0, 0); if(fd < 0){ werrstr("dial %s: %r", addr); free(addr); return nil; } free(addr); fcntl(fd, F_SETFD, FD_CLOEXEC); return fsinit(fd); } CFsys* nsmount(char *name, char *aname) { CFsys *fs; CFid *fid; fs = nsinit(name); if(fs == nil) return nil; if((fid = fsattach(fs, nil, getuser(), aname)) == nil){ _fsunmount(fs); return nil; } fssetroot(fs, fid); return fs; } CFid* nsopen(char *name, char *aname, char *fname, int mode) { CFsys *fs; CFid *fid; fs = nsmount(name, aname); if(fs == nil) return nil; fid = fsopen(fs, fname, mode); fsunmount(fs); return fid; }