s4:heimdal: import lorikeet-heimdal-201009250123 (commit 42cabfb5b683dbcb97d583c397b8...
[samba.git] / source4 / heimdal / lib / hcrypto / libtommath / bn_mp_init_multi.c
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
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.4 $ */
59 /* $Date: 2006/12/28 01:25:13 $ */