URI:
       tns.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tns.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 }