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@gmail.com, http://libtom.org 16 */ 17#include <stdarg.h> 18 19int 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.4 $ */ 59/* $Date: 2006/12/28 01:25:13 $ */ 60