60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <tommath.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.
 | |
|  *
 | |
|  * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
 | |
|  */
 | |
| #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;
 | |
|             
 | |
|             /* end the current list */
 | |
|             va_end(args);
 | |
|             
 | |
|             /* now start cleaning up */            
 | |
|             cur_arg = mp;
 | |
|             va_start(clean_args, mp);
 | |
|             while (n--) {
 | |
|                 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
 | |
| 
 | |
| /* $Source: /cvs/libtom/libtommath/bn_mp_init_multi.c,v $ */
 | |
| /* $Revision: 1.4 $ */
 | |
| /* $Date: 2006/12/28 01:25:13 $ */
 | 
