From 845d76b754460e4e471c70b28dcabeff4320b65c Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Tue, 18 Oct 1994 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1994-10-18 --- port/devns16552.c | 2 +- port/devsrv.c | 27 +++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/port/devns16552.c b/port/devns16552.c index 826734d38aec6587643e4e40f82ed2f1067a434d..ee67050a107f64509940bf3133fb98cc87d214c0 100644 --- a/port/devns16552.c +++ b/port/devns16552.c @@ -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; } diff --git a/port/devsrv.c b/port/devsrv.c index ce03ec2f18a9343afdf2f4e055f73ad2abd24562..a67551604731c5dfd9d53eec7fb90ef3782a0420 100644 --- a/port/devsrv.c +++ b/port/devsrv.c @@ -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