t9P2000.u fixes (Lucho Ionkov) - 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 9e2f1d9bf4c3ce413953b17fa7605b49322d1ace
 (DIR) parent 86c2ab2caf5eb4742e7cd227e6d29fc1dc74d855
 (HTM) Author: rsc <devnull@localhost>
       Date:   Mon, 21 Nov 2005 20:42:52 +0000
       
       9P2000.u fixes (Lucho Ionkov)
       
       Diffstat:
         M src/cmd/9pserve.c                   |      19 +++++++++++++++----
         M src/cmd/vac/vacfs.c                 |       7 +++++--
         M src/lib9/convS2M.c                  |       2 +-
         M src/lib9/fcallfmt.c                 |       4 ++--
       
       4 files changed, 23 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/9pserve.c b/src/cmd/9pserve.c
       t@@ -220,6 +220,8 @@ mainproc(void *v)
                        f.msize = msize;
                        f.tag = NOTAG;
                        n = convS2M(&f, vbuf, sizeof vbuf);
       +                if(n <= BIT16SZ)
       +                        sysfatal("convS2M conversion error");
                        if(verbose > 1) fprint(2, "%T * <- %F\n", &f);
                        nn = write(1, vbuf, n);
                        if(n != nn)
       t@@ -290,8 +292,10 @@ send9pmsg(Msg *m)
                n = sizeS2Mu(&m->rx, m->c->dotu);
                m->rpkt = emalloc(n);
                nn = convS2Mu(&m->rx, m->rpkt, n, m->c->dotu);
       +        if(nn <= BIT16SZ)
       +                sysfatal("convS2Mu conversion error");
                if(nn != n)
       -                sysfatal("sizeS2M + convS2M disagree");
       +                sysfatal("sizeS2Mu and convS2Mu disagree");
                sendq(m->c->outq, m);
        }
        
       t@@ -303,8 +307,10 @@ sendomsg(Msg *m)
                n = sizeS2Mu(&m->tx, m->c->dotu);
                m->tpkt = emalloc(n);
                nn = convS2Mu(&m->tx, m->tpkt, n, m->c->dotu);
       +        if(nn <= BIT16SZ)
       +                sysfatal("convS2Mu conversion error");
                if(nn != n)
       -                sysfatal("sizeS2M + convS2M disagree");
       +                sysfatal("sizeS2Mu and convS2Mu disagree");
                sendq(outq, m);
        }
        
       t@@ -1280,7 +1286,11 @@ repack(Fcall *f, uchar **ppkt, int dotu)
                        pkt = emalloc(nn);
                        *ppkt = pkt;
                }
       -        convS2Mu(f, pkt, nn, dotu);        
       +        n = convS2Mu(f, pkt, nn, dotu);        
       +        if(n <= BIT16SZ)
       +                sysfatal("convS2M conversion error");
       +        if(n != nn)
       +                sysfatal("convS2Mu and sizeS2Mu disagree");
        }
        
        void
       t@@ -1397,7 +1407,8 @@ cvtustat(Fcall *f, uchar **fpkt, int tounix)
        
                n = sizeD2Mu(&dir, tounix);
                buf = emalloc(n);
       -        convD2Mu(&dir, f->stat, n, tounix);
       +        if(convD2Mu(&dir, buf, n, tounix) != n)
       +                sysfatal("convD2Mu conversion error");
                f->nstat = n;
                f->stat = buf;
        
 (DIR) diff --git a/src/cmd/vac/vacfs.c b/src/cmd/vac/vacfs.c
       t@@ -557,7 +557,8 @@ rclunk(Fid *f)
                f->open = 0;
                vtfree(f->user);
                f->user = nil;
       -        vacfiledecref(f->file);
       +        if(f->file)
       +                vacfiledecref(f->file);
                f->file = nil;
                dirBufFree(f->db);
                f->db = nil;
       t@@ -847,7 +848,9 @@ io(void)
                        if(dflag)
                                fprint(2, "vacfs:->%F\n", &thdr);
                        n = convS2Mu(&thdr, mdata, messagesize, dotu);
       -                if (err)
       +                if(n <= BIT16SZ)
       +                        sysfatal("convS2Mu conversion error");
       +                if(err)
                                vtfree(err);
        
                        if(write(mfd[1], mdata, n) != n)
 (DIR) diff --git a/src/lib9/convS2M.c b/src/lib9/convS2M.c
       t@@ -211,7 +211,7 @@ convS2Mu(Fcall *f, uchar *ap, uint nap, int dotu)
                uchar *p;
                uint i, size;
        
       -        size = sizeS2M(f);
       +        size = sizeS2Mu(f, dotu);
                if(size == 0)
                        return 0;
                if(size > nap)
 (DIR) diff --git a/src/lib9/fcallfmt.c b/src/lib9/fcallfmt.c
       t@@ -124,7 +124,7 @@ fcallfmt(Fmt *fmt)
                        break;
                case Rstat:
                        p = seprint(buf, e, "Rstat tag %ud ", tag);
       -                if(f->nstat > sizeof tmp)
       +                if(f->stat == nil || f->nstat > sizeof tmp)
                                seprint(p, e, " stat(%d bytes)", f->nstat);
                        else{
                                d = (Dir*)tmp;
       t@@ -135,7 +135,7 @@ fcallfmt(Fmt *fmt)
                        break;
                case Twstat:        /* 126 */
                        p = seprint(buf, e, "Twstat tag %ud fid %ud", tag, fid);
       -                if(f->nstat > sizeof tmp)
       +                if(f->stat == nil || f->nstat > sizeof tmp)
                                seprint(p, e, " stat(%d bytes)", f->nstat);
                        else{
                                d = (Dir*)tmp;