plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

ns.c (966B)


      1 #include <u.h>
      2 #include <libc.h>
      3 #include <fcall.h>
      4 #include <9pclient.h>
      5 #include <ctype.h>
      6 
      7 CFsys*
      8 nsinit(char *name)
      9 {
     10 	char *addr, *ns;
     11 	int fd;
     12 
     13 	ns = getns();
     14 	if(ns == nil){
     15 		werrstr("no name space");
     16 		return nil;
     17 	}
     18 
     19 	addr = smprint("unix!%s/%s", ns, name);
     20 	free(ns);
     21 	if(addr == nil){
     22 		werrstr("smprint: %r");
     23 		return nil;
     24 	}
     25 
     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);
     33 
     34 	fcntl(fd, F_SETFD, FD_CLOEXEC);
     35 	return fsinit(fd);
     36 }
     37 
     38 CFsys*
     39 nsmount(char *name, char *aname)
     40 {
     41 	CFsys *fs;
     42 	CFid *fid;
     43 
     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 }
     54 
     55 CFid*
     56 nsopen(char *name, char *aname, char *fname, int mode)
     57 {
     58 	CFsys *fs;
     59 	CFid *fid;
     60 
     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 }