- struct rset_bool_info *info = ((struct rset_bool_rfd*)rfd)->info;
- struct rset_bool_rfd *p = (struct rset_bool_rfd *) rfd;
- int rc;
-
-#if RSET_DEBUG
- logf (LOG_DEBUG, "rsbool_forward (L) [%p] '%s' (ct=%p rfd=%p m=%d,%d)",
- rfd, ct->control->desc, ct, rfd, p->more_l, p->more_r);
-#endif
- if ( p->more_l && ((cmpfunc)(untilbuf,p->buf_l)==2) )
- p->more_l = rset_forward(info->rset_l, p->rfd_l, p->buf_l,
- info->cmp, untilbuf);
-#if RSET_DEBUG
- logf (LOG_DEBUG, "rsbool_forward (R) [%p] '%s' (ct=%p rfd=%p m=%d,%d)",
- rfd, ct->control->desc, ct, rfd, p->more_l, p->more_r);
-#endif
- if ( p->more_r && ((cmpfunc)(untilbuf,p->buf_r)==2))
- p->more_r = rset_forward(info->rset_r, p->rfd_r, p->buf_r,
- info->cmp, untilbuf);
-#if RSET_DEBUG
- logf (LOG_DEBUG, "rsbool_forward [%p] calling read, m=%d,%d t=%d",
- rfd, p->more_l, p->more_r, p->tail);
-#endif
-
- p->tail=0;
- rc = rset_read(ct,rfd,buf);
-#if RSET_DEBUG
- logf (LOG_DEBUG, "rsbool_forward returning [%p] %d m=%d,%d",
- rfd, rc, p->more_l, p->more_r);
-#endif
- return rc;
+ struct rfd_private *p = (struct rfd_private *)rfd->priv;
+ const struct rset_key_control *kctrl=rfd->rset->keycontrol;
+
+ if ( p->more_l && ((kctrl->cmp)(untilbuf,p->buf_l)>=rfd->rset->scope) )
+ p->more_l = rset_forward(p->rfd_l, p->buf_l, &p->term_l, untilbuf);
+ if ( p->more_r && ((kctrl->cmp)(untilbuf,p->buf_r)>=rfd->rset->scope))
+ p->more_r = rset_forward(p->rfd_r, p->buf_r, &p->term_r, untilbuf);
+ p->tail = 0;
+ return rset_read(rfd,buf,term);