diff options
author | rsc <devnull@localhost> | 2004-10-22 17:11:30 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2004-10-22 17:11:30 +0000 |
commit | 012a8a02d5e43c1d4698acf42da61f4429c3ac1f (patch) | |
tree | 7b0b6a9018e8195a9a1ca662cd2ad027f82d3c40 /src/cmd/acme/xfid.c | |
parent | e63027eb68ff7252598003151d238dee8850ad34 (diff) | |
download | plan9port-012a8a02d5e43c1d4698acf42da61f4429c3ac1f.tar.gz plan9port-012a8a02d5e43c1d4698acf42da61f4429c3ac1f.tar.bz2 plan9port-012a8a02d5e43c1d4698acf42da61f4429c3ac1f.zip |
change md argument to number etc. (which acted only as a flag)
to an actual flag.
buffer underrun check in number
add xdata file for exactly the addressed region
save addr across opens
Diffstat (limited to 'src/cmd/acme/xfid.c')
-rw-r--r-- | src/cmd/acme/xfid.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/cmd/acme/xfid.c b/src/cmd/acme/xfid.c index 5fc4c5a5..5a2723a4 100644 --- a/src/cmd/acme/xfid.c +++ b/src/cmd/acme/xfid.c @@ -103,13 +103,8 @@ xfidopen(Xfid *x) 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: w->nopen[q]++; + w->limit = range(-1,-1); break; case QWevent: if(w->nopen[q]++ == 0){ @@ -214,12 +209,13 @@ xfidclose(Xfid *x) } break; case QWdata: + case QWxdata: w->nomark = FALSE; /* fall through */ case QWaddr: case QWevent: /* BUG: do we need to shut down Xfid? */ if(--w->nopen[q] == 0){ - if(q == QWdata) + if(q == QWdata || q == QWxdata) w->nomark = FALSE; if(q==QWevent && !w->isdir && w->col!=nil){ w->filemenu = TRUE; @@ -327,6 +323,15 @@ xfidread(Xfid *x) w->addr.q1 = w->addr.q0; break; + case QWxdata: + /* BUG: what should happen if q1 > q0? */ + if(w->addr.q0 > w->body.file->b.nc){ + respond(x, &fc, Eaddr); + break; + } + w->addr.q0 += xfidruneread(x, &w->body, w->addr.q0, w->addr.q1); + break; + case QWtag: xfidutfread(x, &w->tag, w->tag.file->b.nc, QWtag); break; @@ -398,7 +403,7 @@ xfidwrite(Xfid *x) t = &w->body; wincommit(w, t); eval = TRUE; - a = address(x->f->mntdir, t, w->limit, w->addr, r, 0, nr, rgetc, &eval, (uint*)&nb); + a = address(FALSE, t, w->limit, w->addr, r, 0, nr, rgetc, &eval, (uint*)&nb); free(r); if(nb < nr){ respond(x, &fc, Ebadaddr); |