int pgen_filter(int rq, pgen_event *ev, void *p)
{
pgen_filterctx *f = p;
- int rc = PGEN_ABORT;
+ int rc = PGEN_FAIL;
switch (rq) {
case PGEN_BEGIN:
break;
case PGEN_TRY:
mp_drop(ev->m);
- if (!((f->step | f->f.m->v[0]) & 1))
- rc = pfilt_step(&f->f, 1);
- else
- rc = pfilt_step(&f->f, f->step);
break;
case PGEN_DONE:
pfilt_destroy(&f->f);
return (PGEN_DONE);
+ default:
+ rc = PGEN_ABORT;
+ break;
}
+ if (rc == PGEN_FAIL && !((f->step | f->f.m->v[0]) & 1))
+ rc = pfilt_step(&f->f, 1);
while (rc == PGEN_FAIL)
rc = pfilt_step(&f->f, f->step);
ev->m = MP_COPY(f->f.m);