From ef99ca9eda28619bd59ae919ae8229eaf978e64e Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Mon, 12 Dec 1994 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1994-12-12 --- boot/boot.c | 3 +++ port/chan.c | 10 ++++------ port/devmnt.c | 5 +++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/boot/boot.c b/boot/boot.c index 8b9a97b8a6602686455b7f243ff63bdaa51af231..505c00c5da7b8a39f698207e550e4f1e405bdbb0 100644 --- a/boot/boot.c +++ b/boot/boot.c @@ -306,15 +306,18 @@ reattach(int rec, Method *amp, char *buf) p = strrchr(buf, '/'); if(p == 0) goto fail; + *p = '\0'; sprint(tmp, "%s/remote", buf); fd = open(tmp, OREAD); if(fd < 0) goto fail; + n = read(fd, tmp, sizeof(tmp)); if(n < 0) goto fail; + close(fd); tmp[n-1] = '\0'; diff --git a/port/chan.c b/port/chan.c index 419047e7813d2943decbafe057960ecad79eba78..c658afe99d6229214ccc5035cfaa877eedf01683 100644 --- a/port/chan.c +++ b/port/chan.c @@ -500,8 +500,7 @@ mchan(char *id) for(t = f->mount; t; t = t->next) { c = t->to; if(c->type == mdev && c->mntptr->id == mountid) { - c = c->mntptr->c; - incref(c); + c = clone(c, 0); runlock(&pg->ns); poperror(); return c; @@ -562,10 +561,9 @@ namec(char *name, int amode, int omode, ulong perm) elem[n] = '\0'; n = chartorune(&r, elem+1)+1; if(r == 'M') { - if(amode != Aopen || omode != ORDWR) - error(Eperm); - skipslash(name); - return mchan(elem+n); + c = mchan(elem+n); + name = skipslash(name); + break; } t = devno(r, 1); if(t == -1) diff --git a/port/devmnt.c b/port/devmnt.c index 305617f49e2b47e9b2c8af58a6e2711b4271802e..fafa977c7af36a826ef9a9e117e320170e91fc00 100644 --- a/port/devmnt.c +++ b/port/devmnt.c @@ -221,7 +221,7 @@ mattach(Mnt *m, Chan *c, char *spec) r = mntralloc(0); c->mntptr = m; - if(waserror()){ + if(waserror()) { mntfree(r); nexterror(); } @@ -991,7 +991,8 @@ mntrecover(Mnt *m, Mntrpc *r) r->done = 0; mntrecdel(m, r); - recoverchan(m, r->c); + if(r->c != 0) + recoverchan(m, r->c); up->psstate = ps; }