tVarious small interface changes. - 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 d23a617a8302ef9c6b9edb0a29e3bae4737d5f00
 (DIR) parent 3d77c87e81bf16aeaf52ba0f523af6708c5c4964
 (HTM) Author: rsc <devnull@localhost>
       Date:   Mon, 15 Mar 2004 01:57:29 +0000
       
       Various small interface changes.
       
       Diffstat:
         M include/venti.h                     |      41 ++++++++++++++++++++++++-------
         M src/libventi/cache.c                |       7 +++++++
         M src/libventi/entry.c                |      14 +++++++-------
         M src/libventi/file.c                 |      32 +++++++------------------------
         M src/libventi/mkfile                 |       1 +
         M src/libventi/packet.c               |      22 ++++++++++------------
       
       6 files changed, 64 insertions(+), 53 deletions(-)
       ---
 (DIR) diff --git a/include/venti.h b/include/venti.h
       t@@ -22,9 +22,9 @@ int packetconsume(Packet*, uchar *buf, int n);
        int packettrim(Packet*, int offset, int n);
        uchar *packetheader(Packet*, int n);
        uchar *packettrailer(Packet*, int n);
       -int packetprefix(Packet*, uchar *buf, int n);
       -int packetappend(Packet*, uchar *buf, int n);
       -int packetconcat(Packet*, Packet*);
       +void packetprefix(Packet*, uchar *buf, int n);
       +void packetappend(Packet*, uchar *buf, int n);
       +void packetconcat(Packet*, Packet*);
        uchar *packetpeek(Packet*, uchar *buf, int offset, int n);
        int packetcopy(Packet*, uchar *buf, int offset, int n);
        int packetfragments(Packet*, IOchunk*, int nio, int offset);
       t@@ -43,7 +43,6 @@ void packetsha1(Packet*, uchar sha1[20]);
        */
        
        typedef struct VtFcall VtFcall;
       -typedef struct VtSha1 VtSha1;
        typedef struct VtConn VtConn;
        typedef struct VtEntry VtEntry;
        typedef struct VtRoot VtRoot;
       t@@ -85,6 +84,7 @@ enum
                VtMaxType,
        
                VtTypeDepthMask = 7,
       +        VtTypeBaseMask = ~VtTypeDepthMask,
        };
        
        /* convert to/from on-disk type numbers */
       t@@ -97,9 +97,9 @@ uint vtfromdisktype(uint);
        enum
        {
                VtEntryActive = 1<<0,                /* entry is in use */
       -        VtEntryDir = 1<<1,                /* a directory */
       -        VtEntryDepthShift = 2,                /* shift for pointer depth */
       -        VtEntryDepthMask = 7<<2,        /* mask for pointer depth */
       +        _VtEntryDir = 1<<1,                /* a directory */
       +        _VtEntryDepthShift = 2,                /* shift for pointer depth */
       +        _VtEntryDepthMask = 7<<2,        /* mask for pointer depth */
                VtEntryLocal = 1<<5,                /* for local storage only */
        };
        enum
       t@@ -152,7 +152,7 @@ uint vtzerotruncate(int type, uchar *buf, uint n);
        /*
         * parse score: mungs s
         */
       -int vtparsescore(char *s, uint len, char **prefix, uchar[VtScoreSize]);
       +int vtparsescore(char *s, char **prefix, uchar[VtScoreSize]);
        
        /*
         * formatting
       t@@ -384,11 +384,30 @@ u32int vtcacheblocksize(VtCache*);
        int vtblockwrite(VtBlock*);
        VtBlock *vtblockcopy(VtBlock*);
        void vtblockduplock(VtBlock*);
       +int vtblockdirty(VtBlock*);
        
        /*
         * Hash tree file tree.
         */
        typedef struct VtFile VtFile;
       +struct VtFile
       +{
       +        QLock lk;
       +        int ref;
       +        int local;
       +        VtBlock *b;                        /* block containing this file */
       +        uchar score[VtScoreSize];        /* score of block containing this file */
       +
       +/* immutable */
       +        VtCache *c;
       +        int mode;
       +        u32int gen;
       +        int dsize;
       +        int dir;
       +        VtFile *parent;
       +        int epb;                        /* entries per block in parent */
       +        u32int offset;                         /* entry offset in parent */
       +};
        
        enum
        {
       t@@ -403,13 +422,13 @@ VtFile *vtfilecreateroot(VtCache*, int psize, int dsize, int type);
        VtFile *vtfileopen(VtFile*, u32int, int);
        VtFile *vtfilecreate(VtFile*, int psize, int dsize, int dir);
        VtBlock *vtfileblock(VtFile*, u32int, int mode);
       -int vtfileblockhash(VtFile*, u32int, uchar[VtScoreSize]);
        long vtfileread(VtFile*, void*, long, vlong);
        long vtfilewrite(VtFile*, void*, long, vlong);
        int vtfileflush(VtFile*);
        void vtfileincref(VtFile*);
        void vtfileclose(VtFile*);
        int vtfilegetentry(VtFile*, VtEntry*);
       +int vtfilesetentry(VtFile*, VtEntry*);
        int vtfileblockscore(VtFile*, u32int, uchar[VtScoreSize]);
        u32int vtfilegetdirsize(VtFile*);
        int vtfilesetdirsize(VtFile*, u32int);
       t@@ -417,6 +436,10 @@ void        vtfileunlock(VtFile*);
        int vtfilelock(VtFile*, int);
        int vtfilelock2(VtFile*, VtFile*, int);
        int vtfileflushbefore(VtFile*, u64int);
       +int vtfiletruncate(VtFile*);
       +uvlong vtfilegetsize(VtFile*);
       +int vtfilesetsize(VtFile*, uvlong);
       +int vtfileremove(VtFile*);
        
        #if defined(__cplusplus)
        }
 (DIR) diff --git a/src/libventi/cache.c b/src/libventi/cache.c
       t@@ -558,3 +558,10 @@ vtglobaltolocal(uchar score[VtScoreSize])
                        return NilBlock;
                return (score[16]<<24)|(score[17]<<16)|(score[18]<<8)|score[19];
        }
       +
       +int
       +vtblockdirty(VtBlock *b)
       +{
       +        return 0;
       +}
       +
 (DIR) diff --git a/src/libventi/entry.c b/src/libventi/entry.c
       t@@ -31,10 +31,10 @@ vtentrypack(VtEntry *e, uchar *p, int index)
                U16PUT(p, e->dsize);
                p += 2;
                depth = e->type&VtTypeDepthMask;
       -        flags = (e->flags&~(VtEntryDir|VtEntryDepthShift));
       -        flags |= depth << VtEntryDepthShift;
       -        if(e->type - depth == VtEntryDir)
       -                flags |= VtEntryDir;
       +        flags = (e->flags&~(_VtEntryDir|_VtEntryDepthMask));
       +        flags |= depth << _VtEntryDepthShift;
       +        if(e->type - depth == VtDirType)
       +                flags |= _VtEntryDir;
                U8PUT(p, flags);
                p++;
                memset(p, 0, 5);
       t@@ -62,9 +62,9 @@ vtentryunpack(VtEntry *e, uchar *p, int index)
                e->dsize = U16GET(p);
                p += 2;
                e->flags = U8GET(p);
       -        e->type = (e->flags&VtEntryDir) ? VtDirType : VtDataType;
       -        e->type += (e->flags & VtEntryDepthMask) >> VtEntryDepthShift;
       -        e->flags &= ~(VtEntryDir|VtEntryDepthMask);
       +        e->type = (e->flags&_VtEntryDir) ? VtDirType : VtDataType;
       +        e->type += (e->flags & _VtEntryDepthMask) >> _VtEntryDepthShift;
       +        e->flags &= ~(_VtEntryDir|_VtEntryDepthMask);
                p++;
                p += 5;
                e->size = U48GET(p);
 (DIR) diff --git a/src/libventi/file.c b/src/libventi/file.c
       t@@ -21,25 +21,6 @@ enum
                MaxBlock = (1UL<<31),
        };
        
       -struct VtFile
       -{
       -        QLock lk;
       -        int ref;
       -        int local;
       -        VtBlock *b;                        /* block containing this file */
       -        uchar score[VtScoreSize];        /* score of block containing this file */
       -
       -/* immutable */
       -        VtCache *c;
       -        int mode;
       -        u32int gen;
       -        int dsize;
       -        int dir;
       -        VtFile *parent;
       -        int epb;                        /* entries per block in parent */
       -        u32int offset;                         /* entry offset in parent */
       -};
       -
        static char EBadEntry[] = "bad VtEntry";
        static char ENotDir[] = "walk in non-directory";
        static char ETooBig[] = "file too big";
       t@@ -109,7 +90,7 @@ vtfilealloc(VtCache *c, VtBlock *b, VtFile *p, u32int offset, int mode)
                r->mode = mode;
                r->dsize = e.dsize;
                r->gen = e.gen;
       -        r->dir = (e.flags & VtEntryDir) != 0;
       +        r->dir = (e.type & VtTypeBaseMask) == VtDirType;
                r->ref = 1;
                r->parent = p;
                if(p){
       t@@ -169,8 +150,7 @@ vtfilecreateroot(VtCache *c, int psize, int dsize, int type)
                e.flags = VtEntryActive;
                e.psize = psize;
                e.dsize = dsize;
       -        if(type == VtDirType)
       -                e.flags |= VtEntryDir;
       +        e.type = type;
                memmove(e.score, vtzeroscore, VtScoreSize);
        
                return vtfileopenroot(c, &e);
       t@@ -679,13 +659,15 @@ static int
        mkindices(VtEntry *e, u32int bn, int *index)
        {
                int i, np;
       +        u32int obn;
        
       +        obn = bn;
                memset(index, 0, VtPointerDepth*sizeof(int));
        
                np = e->psize/VtScoreSize;
                for(i=0; bn > 0; i++){
                        if(i >= VtPointerDepth){
       -                        werrstr(EBadAddr);
       +                        werrstr("bad address 0x%lux", (ulong)bn);
                                return -1;
                        }
                        index[i] = bn % np;
       t@@ -715,7 +697,7 @@ vtfileblock(VtFile *r, u32int bn, int mode)
                        return nil;
                if(i > DEPTH(e.type)){
                        if(mode == VtOREAD){
       -                        werrstr(EBadAddr);
       +                        werrstr("bad address 0x%lux", (ulong)bn);
                                goto Err;
                        }
                        index[i] = 0;
       t@@ -746,7 +728,7 @@ Err:
        }
        
        int
       -vtfileblockhash(VtFile *r, u32int bn, uchar score[VtScoreSize])
       +vtfileblockscore(VtFile *r, u32int bn, uchar score[VtScoreSize])
        {
                VtBlock *b, *bb;
                int index[VtPointerDepth+1];
 (DIR) diff --git a/src/libventi/mkfile b/src/libventi/mkfile
       t@@ -17,6 +17,7 @@ OFILES=\
                hangup.$O\
                mem.$O\
                packet.$O\
       +        parsescore.$O\
                queue.$O\
                root.$O\
                rpc.$O\
 (DIR) diff --git a/src/libventi/packet.c b/src/libventi/packet.c
       t@@ -113,7 +113,7 @@ packetalloc(void)
                p->last = nil;
                p->next = nil;
        
       -if(1)fprint(2, "packetalloc %p from %08lux %08lux %08lux\n", p, *((uint*)&p+2), *((uint*)&p+3), *((uint*)&p+4));
       +if(0)fprint(2, "packetalloc %p from %08lux %08lux %08lux\n", p, *((uint*)&p+2), *((uint*)&p+3), *((uint*)&p+4));
        
                return p;
        }
       t@@ -123,7 +123,7 @@ packetfree(Packet *p)
        {
                Frag *f, *ff;
        
       -if(1)fprint(2, "packetfree %p from %08lux\n", p, getcallerpc(&p));
       +if(0)fprint(2, "packetfree %p from %08lux\n", p, getcallerpc(&p));
        
                if(p == nil)
                        return;
       t@@ -237,7 +237,7 @@ packetconsume(Packet *p, uchar *buf, int n)
        {
                NOTFREE(p);
                if(buf && packetcopy(p, buf, 0, n) < 0)
       -                return 0;
       +                return -1;
                return packettrim(p, n, p->size-n);
        }
        
       t@@ -371,7 +371,7 @@ packettrailer(Packet *p, int n)
                return f->rp;
        }
        
       -int
       +void
        packetprefix(Packet *p, uchar *buf, int n)
        {
                Frag *f;
       t@@ -380,7 +380,7 @@ packetprefix(Packet *p, uchar *buf, int n)
        
                NOTFREE(p);
                if(n <= 0)
       -                return 0;
       +                return;
        
                p->size += n;
        
       t@@ -410,10 +410,9 @@ packetprefix(Packet *p, uchar *buf, int n)
                        n -= nn;
                        memmove(f->rp, buf+n, nn);
                }
       -        return 0;
        }
        
       -int
       +void
        packetappend(Packet *p, uchar *buf, int n)
        {
                Frag *f;
       t@@ -422,7 +421,7 @@ packetappend(Packet *p, uchar *buf, int n)
        
                NOTFREE(p);
                if(n <= 0)
       -                return 0;
       +                return;
        
                p->size += n;
                /* try and fix in current frag */
       t@@ -455,16 +454,16 @@ packetappend(Packet *p, uchar *buf, int n)
                        buf += nn;
                        n -= nn;
                }
       -        return 0;
       +        return;
        }
        
       -int
       +void
        packetconcat(Packet *p, Packet *pp)
        {
                NOTFREE(p);
                NOTFREE(pp);
                if(pp->size == 0)
       -                return 0;
       +                return;
                p->size += pp->size;
                p->asize += pp->asize;
        
       t@@ -477,7 +476,6 @@ packetconcat(Packet *p, Packet *pp)
                pp->asize = 0;
                pp->first = nil;
                pp->last = nil;
       -        return 0;
        }
        
        uchar *