Home | History | Annotate | Download | only in libtommath
      1 #include <tommath.h>
      2 #ifdef BN_MP_INIT_MULTI_C
      3 /* LibTomMath, multiple-precision integer library -- Tom St Denis
      4  *
      5  * LibTomMath is a library that provides multiple-precision
      6  * integer arithmetic as well as number theoretic functionality.
      7  *
      8  * The library was designed directly after the MPI library by
      9  * Michael Fromberger but has been written from scratch with
     10  * additional optimizations in place.
     11  *
     12  * The library is free for all purposes without any express
     13  * guarantee it works.
     14  *
     15  * Tom St Denis, tomstdenis (at) gmail.com, http://math.libtomcrypt.com
     16  */
     17 #include <stdarg.h>
     18 
     19 int mp_init_multi(mp_int *mp, ...)
     20 {
     21     mp_err res = MP_OKAY;      /* Assume ok until proven otherwise */
     22     int n = 0;                 /* Number of ok inits */
     23     mp_int* cur_arg = mp;
     24     va_list args;
     25 
     26     va_start(args, mp);        /* init args to next argument from caller */
     27     while (cur_arg != NULL) {
     28         if (mp_init(cur_arg) != MP_OKAY) {
     29             /* Oops - error! Back-track and mp_clear what we already
     30                succeeded in init-ing, then return error.
     31             */
     32             va_list clean_args;
     33 
     34             /* end the current list */
     35             va_end(args);
     36 
     37             /* now start cleaning up */
     38             cur_arg = mp;
     39             va_start(clean_args, mp);
     40             while (n--) {
     41                 mp_clear(cur_arg);
     42                 cur_arg = va_arg(clean_args, mp_int*);
     43             }
     44             va_end(clean_args);
     45             res = MP_MEM;
     46             break;
     47         }
     48         n++;
     49         cur_arg = va_arg(args, mp_int*);
     50     }
     51     va_end(args);
     52     return res;                /* Assumed ok, if error flagged above. */
     53 }
     54 
     55 #endif
     56 
     57 /* $Source: /cvs/libtom/libtommath/bn_mp_init_multi.c,v $ */
     58 /* $Revision: 1.3 $ */
     59 /* $Date: 2006/03/31 14:18:44 $ */
     60