+{
+ struct rset_multiandor_rfd *p=rfd->priv;
+ const struct key_control *kctrl=rfd->rset->keycontrol;
+ struct rset_multiandor_info *info=rfd->rset->priv;
+ int i;
+ int cmp;
+ int killtail=0;
+
+ for (i=0; i<info->no_rsets;i++)
+ {
+ cmp=(*kctrl->cmp)(p->items[i].buf,untilbuf);
+ if ( cmp <= -rfd->rset->scope )
+ {
+ killtail=1; /* we are moving to a different hit */
+ if (!rset_forward(p->items[i].fd, p->items[i].buf,
+ untilbuf))
+ {
+ p->eof=1; /* game over */
+ p->tailcount=0;
+ return 0;
+ }
+ }
+ }
+ if (killtail)
+ {
+ for (i=0; i<info->no_rsets;i++)
+ p->tailbits[i]=0;
+ p->tailcount=0;
+ }
+ return r_read_and(rfd,buf);