X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=isamb%2Fisamb.c;h=1695151572cd9f160e80893f5aafa5758cf102b5;hb=64e3d8bb310ec317082d1fc89af4d7cb15d9e106;hp=59d0b2657b05dd39585fdc05f87a7e7650f6fe7e;hpb=2fb4c6ee4faf175f2837e794366539c8683f42c8;p=idzebra-moved-to-github.git diff --git a/isamb/isamb.c b/isamb/isamb.c index 59d0b26..1695151 100644 --- a/isamb/isamb.c +++ b/isamb/isamb.c @@ -1,4 +1,4 @@ -/* $Id: isamb.c,v 1.31 2004-06-01 13:46:41 adam Exp $ +/* $Id: isamb.c,v 1.33 2004-06-01 18:04:41 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -208,6 +208,9 @@ ISAMB isamb_open (BFiles bfs, const char *name, int writeflag, ISAMC_M *method, assert(isamb->file[i].head.block_size == b_size); b_size = b_size * 4; } +#if ISAMB_DEBUG + logf(LOG_WARN, "isamb debug enabled. Things will be slower than usual"); +#endif return isamb; } @@ -1065,7 +1068,7 @@ int isamb_pp_read (ISAMB_PP pp, void *buf) (*pp->isamb->method->code_item)(ISAMC_DECODE, p->decodeClientData, &dst, &src); p->offset = src - (char*) p->bytes; - key_logdump_txt(LOG_DEBUG,buf, "isamb_pp_read returning 1"); + /* key_logdump_txt(LOG_DEBUG,buf, "isamb_pp_read returning 1"); */ return 1; } @@ -1103,6 +1106,7 @@ int isamb_pp_forward (ISAMB_PP pp, void *buf, const void *untilbuf) int item_len; int pos; int nxtpos; + int descending=0; /* used to prevent a border condition error */ if (!p) return 0; #if ISAMB_DEBUG @@ -1114,7 +1118,7 @@ int isamb_pp_forward (ISAMB_PP pp, void *buf, const void *untilbuf) while (1) { - while ( p->offset == p->size) + while ( (p->offset == p->size) && !descending ) { /* end of this block - climb higher */ #if ISAMB_DEBUG logf(LOG_DEBUG,"isamb_pp_forward climbing from l=%d", @@ -1180,6 +1184,7 @@ int isamb_pp_forward (ISAMB_PP pp, void *buf, const void *untilbuf) logf(LOG_DEBUG,"isambb_pp_forward descending l=%d p=%d ", pp->level, pos); #endif + descending=1; /* prevent climbing for a while */ ++(pp->level); p = open_block(pp->isamb,pos); pp->block[pp->level] = p ;