fix offsets

This commit is contained in:
rsc 2006-02-03 04:36:50 +00:00
parent 9cfbc441e7
commit 9777187bc7

View file

@ -30,6 +30,8 @@ struct Fid
int ref; int ref;
int cfid; int cfid;
int openfd; int openfd;
int offset;
int coffset;
int isdir; int isdir;
Fid *next; Fid *next;
}; };
@ -475,6 +477,12 @@ connthread(void *arg)
continue; continue;
} }
} }
if(m->tx.type==Tread && m->fid->isdir && dotu && !c->dotu){
if(m->tx.offset = m->fid->coffset)
m->tx.offset = m->fid->offset;
else
m->fid->offset = m->fid->coffset;
}
break; break;
} }
@ -791,8 +799,11 @@ connoutthread(void *arg)
fidput(m->newfid); fidput(m->newfid);
break; break;
case Tread: case Tread:
if(!err && m->fid->isdir && dotu && !m->c->dotu) if(!err && m->fid->isdir && dotu && !m->c->dotu){
m->fid->offset += m->rx.count;
stripudirread(m); stripudirread(m);
m->fid->coffset += m->rx.count;
}
break; break;
case Tstat: case Tstat:
if(!err && dotu && !m->c->dotu) if(!err && dotu && !m->c->dotu)
@ -961,6 +972,8 @@ fidnew(int cfid)
freefid = f->next; freefid = f->next;
f->cfid = cfid; f->cfid = cfid;
f->ref = 1; f->ref = 1;
f->offset = 0;
f->coffset = 0;
f->isdir = -1; f->isdir = -1;
return f; return f;
} }
@ -1329,14 +1342,17 @@ rewritehdr(Fcall *f, uchar *pkt)
restring(pkt, n, f->name); restring(pkt, n, f->name);
/* fall through */ /* fall through */
case Topen: case Topen:
case Tread:
case Twrite:
case Tclunk: case Tclunk:
case Tremove: case Tremove:
case Tstat: case Tstat:
case Twstat: case Twstat:
case Twrite:
PBIT32(pkt+7, f->fid); PBIT32(pkt+7, f->fid);
break; break;
case Tread:
PBIT32(pkt+7, f->fid);
PBIT64(pkt+11, f->offset);
break;
case Rerror: case Rerror:
restring(pkt, n, f->ename); restring(pkt, n, f->ename);
break; break;