-/* $Id: isamb.c,v 1.31 2004-06-01 13:46:41 adam Exp $
+/* $Id: isamb.c,v 1.32 2004-06-01 14:51:00 heikki Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
#include <assert.h>
#ifndef ISAMB_DEBUG
-#define ISAMB_DEBUG 0
+#define ISAMB_DEBUG 1
#endif
struct ISAMB_head {
(*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;
}
int item_len;
int pos;
int nxtpos;
+ int descending=0; /* used to prevent a border condition error */
if (!p)
return 0;
#if ISAMB_DEBUG
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",
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 ;