commit e9b70a5f4ca38a98b64c9e0cea528693f5297376 from: Russ Cox date: Sun Jun 15 03:05:19 2008 UTC libventi: minor vtfile bug fixes commit - 13096891711f32d8a7dca3e1ba9cced908752c14 commit + e9b70a5f4ca38a98b64c9e0cea528693f5297376 blob - 29b414f68223f44f9ee08ac58686aff32a8d0dda blob + b6887dec7ad12033bf684283ecf9891d7d32bb56 --- src/libventi/file.c +++ src/libventi/file.c @@ -607,7 +607,7 @@ shrinkdepth(VtFile *r, VtBlock *p, VtEntry *e, int dep rb = vtcacheglobal(r->c, e->score, e->type); if(rb == nil) - return 0; + return -1; /* * Walk down to the new root block. @@ -748,6 +748,12 @@ vtfileblockscore(VtFile *r, u32int bn, uchar score[VtS 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); @@ -1058,6 +1064,8 @@ filewrite1(VtFile *f, void *data, long count, vlong of 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); @@ -1118,9 +1126,12 @@ flushblock(VtCache *c, VtBlock *bb, uchar score[VtScor for(i=0; idata, 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;