/* -*-c-*-
*
- * $Id: pgen.c,v 1.4 1999/12/22 16:01:11 mdw Exp $
+ * $Id: pgen.c,v 1.7 2001/02/03 16:05:32 mdw Exp $
*
* Prime generation glue
*
/*----- Revision history --------------------------------------------------*
*
* $Log: pgen.c,v $
+ * Revision 1.7 2001/02/03 16:05:32 mdw
+ * Now @mp_drop@ checks its argument is non-NULL before attempting to free
+ * it. Note that the macro version @MP_DROP@ doesn't do this.
+ *
+ * Revision 1.6 2000/10/08 12:11:22 mdw
+ * Use @MP_EQ@ instead of @MP_CMP@.
+ *
+ * Revision 1.5 2000/06/17 11:52:36 mdw
+ * Signal a pgen abort if the jump and base share a common factor.
+ *
* Revision 1.4 1999/12/22 16:01:11 mdw
* Same file, completely different code. Main interface for new prime-
* search system.
int rc = PGEN_ABORT;
switch (rq) {
- case PGEN_BEGIN:
+ case PGEN_BEGIN: {
+ mp *g = MP_NEW;
+ mp_gcd(&g, 0, 0, ev->m, f->j->m);
+ if (MP_CMP(g, >, MP_ONE)) {
+ mp_drop(g);
+ return (PGEN_ABORT);
+ }
+ mp_drop(g);
rc = pfilt_create(&f->f, ev->m);
mp_drop(ev->m);
- break;
+ } break;
case PGEN_TRY:
mp_drop(ev->m);
rc = pfilt_jump(&f->f, f->j);
ev.m = 0;
}
ev.r->ops->destroy(ev.r);
- if (d != MP_NEW)
- mp_drop(d);
+ mp_drop(d);
return (ev.m);
}
pf.step = 2;
p = pgen("p", MP_NEW, m, pgen_evspin, 0, 0, pgen_filter, &pf,
rabin_iters(mp_bits(m)), pgen_test, &r);
- if (!p || MP_CMP(p, !=, q)) {
+ if (!p || !MP_EQ(p, q)) {
fputs("\n*** pgen failed", stderr);
fputs("\nm = ", stderr); mp_writefile(m, stderr, 10);
fputs("\np = ", stderr); mp_writefile(p, stderr, 10);
mp_drop(m);
mp_drop(q);
- if (p)
- mp_drop(p);
+ mp_drop(p);
assert(mparena_count(MPARENA_GLOBAL) == 0);
return (ok);
}