-/* $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
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;
}
(*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 ;