From cb5c09ba159e41d53e5bc6924028a5ef79d8f3c6 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Wed, 8 Feb 1995 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1995-02-08 --- port/chan.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/port/chan.c b/port/chan.c index c658afe99d6229214ccc5035cfaa877eedf01683..4bb59be7c400e7def49d8ca8e5da0c6ba59ebc65 100644 --- a/port/chan.c +++ b/port/chan.c @@ -475,7 +475,7 @@ createdir(Chan *c) } Chan* -mchan(char *id) +mchan(char *id, int walkname) { Chan *c; Pgrp *pg; @@ -500,7 +500,12 @@ mchan(char *id) for(t = f->mount; t; t = t->next) { c = t->to; if(c->type == mdev && c->mntptr->id == mountid) { - c = clone(c, 0); + if(walkname == 0) { + c = c->mntptr->c; + incref(c); + } + else + c = clone(c, 0); runlock(&pg->ns); poperror(); return c; @@ -561,8 +566,17 @@ namec(char *name, int amode, int omode, ulong perm) elem[n] = '\0'; n = chartorune(&r, elem+1)+1; if(r == 'M') { - c = mchan(elem+n); - name = skipslash(name); + if(elem[n] == 'c') { + c = mchan(elem+n+1, 0); + name = skipslash(name); + if(*name) + error(Efilename); + return c; + } + else { + c = mchan(elem+n, 1); + name = skipslash(name); + } break; } t = devno(r, 1);