]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/9/port/sysfile.c
devmnt: deal with partial response for Tversion request in mntversion()
[plan9front.git] / sys / src / 9 / port / sysfile.c
index 77ff43fa30ab532b546d10ed5f0a52c890cc7ffd..451822917b64ae1c07133f3d2141cec54e7bac91 100644 (file)
@@ -294,7 +294,7 @@ fdclose(int fd, int flag)
        Fgrp *f = up->fgrp;
 
        lock(f);
-       c = f->fd[fd];
+       c = fd <= f->maxfd ? f->fd[fd] : nil;
        if(c == nil || (flag != 0 && (c->flag&flag) == 0)){
                unlock(f);
                return;
@@ -1002,16 +1002,10 @@ syschdir(va_list list)
 }
 
 long
-bindmount(int ismount, int fd, int afd, char* arg0, char* arg1, ulong flag, char* spec)
+bindmount(int ismount, int fd, int afd, char* arg0, char* arg1, int flag, char* spec)
 {
        int ret;
        Chan *c0, *c1, *ac, *bc;
-       struct{
-               Chan    *chan;
-               Chan    *authchan;
-               char    *spec;
-               int     flags;
-       }bogus;
 
        if((flag&~MMASK) || (flag&MORDER)==(MBEFORE|MAFTER))
                error(Ebadarg);
@@ -1039,12 +1033,7 @@ bindmount(int ismount, int fd, int afd, char* arg0, char* arg1, ulong flag, char
                if(afd >= 0)
                        ac = fdtochan(afd, ORDWR, 0, 1);
 
-               bogus.flags = flag & MCACHE;
-               bogus.chan = bc;
-               bogus.authchan = ac;
-               bogus.spec = spec;
-               ret = devno('M', 0);
-               c0 = devtab[ret]->attach((char*)&bogus);
+               c0 = mntattach(bc, ac, spec, flag&MCACHE);
                poperror();     /* ac bc */
                if(ac != nil)
                        cclose(ac);
@@ -1085,11 +1074,11 @@ uintptr
 sysbind(va_list list)
 {
        char *arg0, *arg1;
-       ulong flag;
+       int flag;
 
        arg0 = va_arg(list, char*);
        arg1 = va_arg(list, char*);
-       flag = va_arg(list, ulong);
+       flag = va_arg(list, int);
        return (uintptr)bindmount(0, -1, -1, arg0, arg1, flag, nil);
 }
 
@@ -1097,13 +1086,13 @@ uintptr
 sysmount(va_list list)
 {
        char *arg1, *spec;
-       ulong flag;
+       int flag;
        int fd, afd;
 
        fd = va_arg(list, int);
        afd = va_arg(list, int);
        arg1 = va_arg(list, char*);
-       flag = va_arg(list, ulong);
+       flag = va_arg(list, int);
        spec = va_arg(list, char*);
        return (uintptr)bindmount(1, fd, afd, nil, arg1, flag, spec);
 }
@@ -1112,12 +1101,12 @@ uintptr
 sys_mount(va_list list)
 {
        char *arg1, *spec;
-       ulong flag;
+       int flag;
        int fd;
 
        fd = va_arg(list, int);
        arg1 = va_arg(list, char*);
-       flag = va_arg(list, ulong);
+       flag = va_arg(list, int);
        spec = va_arg(list, char*);
        return (uintptr)bindmount(1, fd, -1, nil, arg1, flag, spec);
 }