remove searching print; check fids in use; handle addr correctly again
diff --git a/src/cmd/acme/addr.c b/src/cmd/acme/addr.c index 4e31d6a..7af5f6b 100644 --- a/src/cmd/acme/addr.c +++ b/src/cmd/acme/addr.c
@@ -138,7 +138,6 @@ q = Infinity; else q = lim.q1; -warning(nil, "searching %d-%d\n", r.q1, q); found = rxexecute(t, nil, r.q1, q, &sel); } if(!found && showerr)
diff --git a/src/cmd/acme/fsys.c b/src/cmd/acme/fsys.c index 66b935f..536a333 100644 --- a/src/cmd/acme/fsys.c +++ b/src/cmd/acme/fsys.c
@@ -160,10 +160,24 @@ if(fcall[x->fcall.type] == 0) x = respond(x, &t, "bad fcall type"); else{ - if(x->fcall.type==Tversion || x->fcall.type==Tauth) + switch(x->fcall.type){ + case Tversion: + case Tauth: + case Tflush: f = nil; - else + break; + case Tattach: f = newfid(x->fcall.fid); + break; + default: + f = newfid(x->fcall.fid); + if(!f->busy){ + x->f = f; + x = respond(x, &t, "fid not in use"); + continue; + } + break; + } x->f = f; x = (*fcall[x->fcall.type])(x, f); }
diff --git a/src/cmd/acme/xfid.c b/src/cmd/acme/xfid.c index 13d7295..579f194 100644 --- a/src/cmd/acme/xfid.c +++ b/src/cmd/acme/xfid.c
@@ -103,8 +103,14 @@ q = FILE(x->f->qid); switch(q){ case QWaddr: + if(w->nopen[q]++ == 0){ + w->addr = range(0, 0); + w->limit = range(-1,-1); + } + break; + case QWdata: + case QWxdata: w->nopen[q]++; - w->limit = range(-1,-1); break; case QWevent: if(w->nopen[q]++ == 0){