tfix offsets - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 9777187bc7259526e1edcdaa1cc5d593616a32a4
 (DIR) parent 9cfbc441e736b579cc6d9c4369895a9b5c34a7c0
 (HTM) Author: rsc <devnull@localhost>
       Date:   Fri,  3 Feb 2006 04:36:50 +0000
       
       fix offsets
       
       Diffstat:
         M src/cmd/9pserve.c                   |      22 +++++++++++++++++++---
       
       1 file changed, 19 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/9pserve.c b/src/cmd/9pserve.c
       t@@ -30,6 +30,8 @@ struct Fid
                int ref;
                int cfid;
                int openfd;
       +        int offset;
       +        int coffset;
                int isdir;
                Fid *next;
        };
       t@@ -475,6 +477,12 @@ connthread(void *arg)
                                                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;
                        }
        
       t@@ -791,8 +799,11 @@ connoutthread(void *arg)
                                                fidput(m->newfid);
                                break;
                        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);
       +                                m->fid->coffset += m->rx.count;
       +                        }
                                break;
                        case Tstat:
                                if(!err && dotu && !m->c->dotu)
       t@@ -961,6 +972,8 @@ fidnew(int cfid)
                freefid = f->next;
                f->cfid = cfid;
                f->ref = 1;
       +        f->offset = 0;
       +        f->coffset = 0;
                f->isdir = -1;
                return f;
        }
       t@@ -1329,13 +1342,16 @@ rewritehdr(Fcall *f, uchar *pkt)
                        restring(pkt, n, f->name);
                        /* fall through */
                case Topen:
       -        case Tread:
       -        case Twrite:
                case Tclunk:
                case Tremove:
                case Tstat:
                case Twstat:
       +        case Twrite:
       +                PBIT32(pkt+7, f->fid);
       +                break;
       +        case Tread:
                        PBIT32(pkt+7, f->fid);
       +                PBIT64(pkt+11, f->offset);
                        break;
                case Rerror:
                        restring(pkt, n, f->ename);