| #include <u.h> | 
 | #include <libc.h> | 
 | #include <fcall.h> | 
 | #include <9pclient.h> | 
 | #include <ctype.h> | 
 |  | 
 | 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; | 
 | } | 
 |  |