X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=isam%2Fphysical.c;h=9837e00aa4b3b8c66cdaca234dbb1dce9e369d9f;hb=392b67432545d96cb2f9b3264a9427582fc1934f;hp=d8883f1520c7c4b292e77fd6963415283e78e68f;hpb=b9732ff4230548163453f28181a96ed268e4de1f;p=idzebra-moved-to-github.git diff --git a/isam/physical.c b/isam/physical.c index d8883f1..9837e00 100644 --- a/isam/physical.c +++ b/isam/physical.c @@ -4,7 +4,19 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: physical.c,v $ - * Revision 1.10 1996-03-19 19:22:44 quinn + * Revision 1.14 1997-09-09 13:38:12 adam + * Partial port to WIN95/NT. + * + * Revision 1.13 1996/10/29 13:56:57 adam + * Include of zebrautl.h instead of alexutil.h. + * + * Revision 1.12 1996/03/20 16:17:11 quinn + * Bug hunting + * + * Revision 1.11 1996/03/20 13:29:17 quinn + * Bug-fix + * + * Revision 1.10 1996/03/19 19:22:44 quinn * Fixed update-bug * * Revision 1.9 1996/02/06 10:19:57 quinn @@ -43,7 +55,9 @@ #include #include +#include +#include #include static int is_freestore_alloc(ISAM is, int type) @@ -106,6 +120,7 @@ int is_p_read_partial(is_mtable *tab, is_mblock *block) /* extract header info */ buf->offset = 0; memcpy(&block->num_records, buf->data, sizeof(block->num_records)); + assert(block->num_records > 0); buf->offset += sizeof(block->num_records); memcpy(&block->nextpos, buf->data + buf->offset, sizeof(block->nextpos)); @@ -116,6 +131,9 @@ int is_p_read_partial(is_mtable *tab, is_mblock *block) sizeof(tab->num_records)); buf->offset +=sizeof(tab->num_records); } + logf(LOG_DEBUG, "R: Block #%d: num %d nextpos %d total %d", + block->diskpos, block->num_records, block->nextpos, + block == tab->data ? tab->num_records : -1); buf->num = (toread - buf->offset) / is_keysize(tab->is); if (buf->num >= block->num_records) { @@ -207,10 +225,15 @@ void is_p_sync(is_mtable *tab) sizeof(tab->num_records)); sum += sizeof(tab->num_records); } + logf (LOG_DEBUG, "W: Block #%d contains %d records.", p->diskpos, + p->num_records); + assert(p->num_records > 0); for (b = p->data; b; b = b->next) { - memcpy(type->dbuf + sum, b->data + b->offset, v = b->num * - is_keysize(tab->is)); + logf(LOG_DEBUG, " buf: offset %d, keys %d, type %d, ref %d", + b->offset, b->num, b->type, b->refcount); + if ((v = b->num * is_keysize(tab->is)) > 0) + memcpy(type->dbuf + sum, b->data + b->offset, v); sum += v; assert(sum <= type->blocksize); @@ -220,7 +243,6 @@ void is_p_sync(is_mtable *tab) logf (LOG_FATAL, "Failed to write block."); exit(1); } - logf (LOG_DEBUG, "W: Block #%d contains %d records.", p->diskpos, p->num_records); } } @@ -300,8 +322,7 @@ void is_p_align(is_mtable *tab) } else { - tab->data = tab->data->next; - next = tab->data; + next = tab->data->next; if (next) { if (next->state < IS_MBSTATE_CLEAN) @@ -320,6 +341,7 @@ void is_p_align(is_mtable *tab) } } next->state = IS_MBSTATE_DIRTY; /* force re-process */ + tab->data = next; } } if (mblock->diskpos >= 0)