- src = p->bytes + p->offset;
- dst=buf;
- (*pp->isamb->method->code_item)(ISAMC_DECODE, p->decodeClientData,
- &dst, &src);
- p->offset = src - (char*) p->bytes;
- if (untilbuf)
- cmp=(*pp->isamb->method->compare_item)(untilbuf,buf);
- else
- cmp=-2;
- logf(LOG_DEBUG,"isamb_pp_forward on a leaf. cmp=%d",
- cmp);
- (*pp->isamb->method->log_item)(LOG_DEBUG, buf, "");
-
- if (cmp <2)
- {
- if (untilbuf)
- {
- (*pp->isamb->method->log_item)(LOG_DEBUG, buf,
- "isamb_pp_forward returning 1");
- }
- else
+ if (p->offset == p->size) {
+ descending = 0;
+ }
+ else
+ {
+ assert (p->offset < p->size);
+ src = p->bytes + p->offset;
+ dst=buf;
+ (*pp->isamb->method->code_item)(ISAMC_DECODE, p->decodeClientData,
+ &dst, &src);
+ p->offset = src - (char*) p->bytes;
+ if (untilbuf)
+ cmp=(*pp->isamb->method->compare_item)(untilbuf,buf);
+ else
+ cmp=-2;
+#if ISAMB_DEBUG
+ logf(LOG_DEBUG,"isamb_pp_forward on a leaf. cmp=%d",
+ cmp);
+ (*pp->isamb->method->log_item)(LOG_DEBUG, buf, "");
+#endif
+ if (cmp <2)