tlibventi: minor vtfile bug fixes - 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 e9b70a5f4ca38a98b64c9e0cea528693f5297376
 (DIR) parent 13096891711f32d8a7dca3e1ba9cced908752c14
 (HTM) Author: Russ Cox <rsc@swtch.com>
       Date:   Sat, 14 Jun 2008 23:05:19 -0400
       
       libventi: minor vtfile bug fixes
       
       Diffstat:
         M src/libventi/file.c                 |      13 ++++++++++++-
       
       1 file changed, 12 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/src/libventi/file.c b/src/libventi/file.c
       t@@ -607,7 +607,7 @@ shrinkdepth(VtFile *r, VtBlock *p, VtEntry *e, int depth)
        
                rb = vtcacheglobal(r->c, e->score, e->type);
                if(rb == nil)
       -                return 0;
       +                return -1;
        
                /*
                 * Walk down to the new root block.
       t@@ -748,6 +748,12 @@ vtfileblockscore(VtFile *r, u32int bn, uchar score[VtScoreSize])
                if(b == nil)
                        return -1;
        
       +        if(DEPTH(e.type) == 0){
       +                memmove(score, e.score, VtScoreSize);
       +                vtblockput(b);
       +                return 0;
       +        }
       +
                i = mkindices(&e, bn, index);
                if(i < 0){
                        vtblockput(b);
       t@@ -1058,6 +1064,8 @@ filewrite1(VtFile *f, void *data, long count, vlong offset)
                        return -1;
        
                memmove(b->data+frag, data, count);
       +        if(m == VtOWRITE && frag+count < e.dsize)
       +                memset(b->data+frag+count, 0, e.dsize-frag-count);
        
                if(offset+count > e.size){
                        vtfilegetentry(f, &e);
       t@@ -1118,9 +1126,12 @@ flushblock(VtCache *c, VtBlock *bb, uchar score[VtScoreSize], int ppb, int epb,
                        for(i=0; i<epb; i++){
                                if(vtentryunpack(&e, b->data, i) < 0)
                                        goto Err;
       +                        if(!(e.flags&VtEntryActive))
       +                                continue;
                                if(flushblock(c, nil, e.score, e.psize/VtScoreSize, e.dsize/VtEntrySize,
                                        e.type) < 0)
                                        goto Err;
       +                        vtentrypack(&e, b->data, i);
                        }
                        break;