wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit 8ce41092cde23616dc9c0647e4a4435c01fba767
parent b65d5124f6c0903d0ff5a858b11ab4d2ecd29adf
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Tue,  7 Feb 2006 20:46:32 +0100

proceeded, root dir entries can be received now


Diffstat:
cmd/wmiifs.c | 26++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/cmd/wmiifs.c b/cmd/wmiifs.c @@ -298,8 +298,7 @@ mntrespond(IXPConn *c, Fcall *fcall) { Bind *b = rx_to_bind(c); fprintf(stderr, "mntrespond, welcome: fcall->id=%d\n", fcall->id); - memcpy(&b->fcall, &b->client.fcall, sizeof(Fcall)); - b->fcall.id++; + memcpy(&b->fcall, fcall, sizeof(Fcall)); ixp_server_respond_fcall(b->tx, &b->fcall); } @@ -324,8 +323,10 @@ mntwalk(IXPConn *c, Fcall *fcall) return; } dir = b->fcall.wqid[0]; /* mount point */ - for(nwqid = 0; nwqid < b->client.fcall.nwqid; nwqid++) - b->fcall.wqid[nwqid + 1] = b->client.fcall.wqid[nwqid]; + for(nwqid = 0; nwqid < fcall->nwqid; nwqid++) + b->fcall.wqid[nwqid + 1] = fcall->wqid[nwqid]; + if(!fcall->nwqid) + nwqid++; if(!nwqid) { fprintf(stderr, "%s", "wmiifs: mntwalk nwqid wrong \n"); @@ -339,8 +340,8 @@ mntwalk(IXPConn *c, Fcall *fcall) if(nwqid == b->fcall.nwname) { if(b->fcall.fid != b->fcall.newfid) { m = cext_emallocz(sizeof(IXPMap)); - c->map = (IXPMap **) - cext_array_attach((void **)c->map, m, sizeof(IXPMap *), &c->mapsz); + b->tx->map = (IXPMap **) + cext_array_attach((void **)b->tx->map, m, sizeof(IXPMap *), &b->tx->mapsz); } m->qid = dir; /* mount point, even if not */ m->fid = b->fcall.newfid; @@ -567,6 +568,7 @@ xstat(IXPConn *c, Fcall *fcall) fprintf(stderr, "xstat: welcome, fcall->fid=%d\n", fcall->fid); if(!m) return Enofid; + fprintf(stderr, "xstat: now fetching bind, fcall->fid=%d\n", fcall->fid); if((b = fid_to_bind(m->fid))) return mntrequest(b, fcall); name = qid_to_name(&m->qid); @@ -632,6 +634,18 @@ xwrite(IXPConn *c, Fcall *fcall) static void mntclunk(IXPConn *c, Fcall *fcall) { + Bind *b = rx_to_bind(c); + IXPMap *m; + + if(!(m = ixp_server_fid2map(b->tx, b->fcall.fid))) { + ixp_server_respond_error(b->tx, &b->fcall, Enofid); + xunbind(b); + return; + } + cext_array_detach((void **)b->tx->map, m, &b->tx->mapsz); + free(m); + b->fcall.id = RCLUNK; + ixp_server_respond_fcall(b->tx, &b->fcall); } char *