Added isamb_pp_forward test. Changed messages from test program from
[idzebra-moved-to-github.git] / isamb / isamb.c
index 59d0b26..1695151 100644 (file)
@@ -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 ;