M port/devns16552.c => port/devns16552.c +1 -1
@@ 942,6 942,6 @@ ns16552wstat(Chan *c, char *dp)
dt = &ns16552dir[3 * NETID(c->qid.path)];
convM2D(dp, &d);
- d.mode &= 0x666;
+ d.mode &= 0666;
dt[0].perm = dt[1].perm = d.mode;
}
M port/devsrv.c => port/devsrv.c +25 -2
@@ 185,8 185,31 @@ srvremove(Chan *c)
void
srvwstat(Chan *c, char *dp)
{
- USED(c, dp);
- error(Egreg);
+ Dir d;
+ Srv *sp;
+
+ if(!iseve())
+ error(Eperm);
+ if(CHDIR & c->qid.path)
+ error(Eperm);
+
+ qlock(&srvlk);
+ if(waserror()){
+ qunlock(&srvlk);
+ nexterror();
+ }
+
+ for(sp = srv; sp; sp = sp->link)
+ if(sp->path == c->qid.path)
+ break;
+ if(sp == 0 || sp->chan == 0)
+ error(Eshutdown);
+ convM2D(dp, &d);
+ d.mode &= 0777;
+ sp->perm = d.mode;
+
+ qunlock(&srvlk);
+ poperror();
}
void