tns.c - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
tns.c (966B)
---
     1 #include 
     2 #include 
     3 #include 
     4 #include <9pclient.h>
     5 #include 
     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 }