56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "tommath_private.h"
 | |
| #ifdef BN_MP_INIT_MULTI_C
 | |
| /* LibTomMath, multiple-precision integer library -- Tom St Denis
 | |
|  *
 | |
|  * LibTomMath is a library that provides multiple-precision
 | |
|  * integer arithmetic as well as number theoretic functionality.
 | |
|  *
 | |
|  * The library was designed directly after the MPI library by
 | |
|  * Michael Fromberger but has been written from scratch with
 | |
|  * additional optimizations in place.
 | |
|  *
 | |
|  * The library is free for all purposes without any express
 | |
|  * guarantee it works.
 | |
|  */
 | |
| 
 | |
| #include <stdarg.h>
 | |
| 
 | |
| int mp_init_multi(mp_int *mp, ...)
 | |
| {
 | |
|    mp_err res = MP_OKAY;      /* Assume ok until proven otherwise */
 | |
|    int n = 0;                 /* Number of ok inits */
 | |
|    mp_int *cur_arg = mp;
 | |
|    va_list args;
 | |
| 
 | |
|    va_start(args, mp);        /* init args to next argument from caller */
 | |
|    while (cur_arg != NULL) {
 | |
|       if (mp_init(cur_arg) != MP_OKAY) {
 | |
|          /* Oops - error! Back-track and mp_clear what we already
 | |
|             succeeded in init-ing, then return error.
 | |
|          */
 | |
|          va_list clean_args;
 | |
| 
 | |
|          /* now start cleaning up */
 | |
|          cur_arg = mp;
 | |
|          va_start(clean_args, mp);
 | |
|          while (n-- != 0) {
 | |
|             mp_clear(cur_arg);
 | |
|             cur_arg = va_arg(clean_args, mp_int *);
 | |
|          }
 | |
|          va_end(clean_args);
 | |
|          res = MP_MEM;
 | |
|          break;
 | |
|       }
 | |
|       n++;
 | |
|       cur_arg = va_arg(args, mp_int *);
 | |
|    }
 | |
|    va_end(args);
 | |
|    return res;                /* Assumed ok, if error flagged above. */
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| /* ref:         $Format:%D$ */
 | |
| /* git commit:  $Format:%H$ */
 | |
| /* commit time: $Format:%ai$ */
 |