A variety of small tweaks and fixes. Make mpmont etc. return errors
[u/mdw/catacomb] / mpbarrett.c
index ffd2649..b5e604e 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: mpbarrett.c,v 1.10 2004/04/08 01:36:15 mdw Exp $
+ * $Id$
  *
  * Barrett modular reduction
  *
  *             @mp *m@ = modulus to work to
  *
  *
- * Returns:    ---
+ * Returns:    Zero on success, nonzero on error.
  *
  * Use:                Initializes a Barrett reduction context ready for use.
  */
 
-void mpbarrett_create(mpbarrett *mb, mp *m)
+int mpbarrett_create(mpbarrett *mb, mp *m)
 {
   mp *b;
 
   /* --- Validate the arguments --- */
 
-  assert(((void)"Barrett modulus must be positive", (m->f & MP_NEG) == 0));
+  if (!MP_POSP(m))
+    return (-1);
 
   /* --- Compute %$\mu$% --- */
 
@@ -63,6 +64,7 @@ void mpbarrett_create(mpbarrett *mb, mp *m)
   b->vl[-1] = 1;
   mp_div(&b, 0, b, m);
   mb->mu = b;
+  return (0);
 }
 
 /* --- @mpbarrett_destroy@ --- *