diff --git a/src/9vx/devip.c b/src/9vx/devip.c index de14509..284079d 100755 --- a/src/9vx/devip.c +++ b/src/9vx/devip.c @@ -92,6 +92,14 @@ ipgen(Chan *c, char *nname, Dirtab *d, int nd, int s, Dir *dp) q.type = 0; switch(TYPE(c->qid)) { case Qtopdir: + if(s == DEVDOTDOT) { +Topdir: + q.path = QID(0, 0, Qtopdir); + q.type = QTDIR; + snprint(up->genbuf, sizeof up->genbuf, "#I%lud", c->dev); + devdir(c, q, up->genbuf, 0, "network", DMDIR|0555, dp); + return 1; + } case Qcs: case Qdns: if(s >= 2+np) @@ -106,12 +114,15 @@ ipgen(Chan *c, char *nname, Dirtab *d, int nd, int s, Dir *dp) devdir(c, q, "dns", 0, "network", 0666, dp); }else{ s-=2; +Protodir: q.path = QID(s, 0, Qprotodir); q.type = QTDIR; devdir(c, q, proto[s].name, 0, "network", DMDIR|0555, dp); } return 1; case Qprotodir: + if(s == DEVDOTDOT) + goto Topdir; case Qclonus: if(s < proto[PROTO(c->qid)].nc) { cv = proto[PROTO(c->qid)].conv[s]; @@ -133,6 +144,10 @@ ipgen(Chan *c, char *nname, Dirtab *d, int nd, int s, Dir *dp) devdir(c, q, p, 0, "network", 0555, dp); return 1; case Qconvdir: + if(s == DEVDOTDOT) { + s = PROTO(c->qid); + goto Protodir; + } case Qdata: case Qctl: case Qstatus: