| 
									
										
										
										
											2004-10-29 22:07:18 +00:00
										 |  |  | #include <tommath.h>
 | 
					
						
							|  |  |  | #ifdef BN_MP_INIT_MULTI_C
 | 
					
						
							| 
									
										
										
										
											2003-05-17 12:33:54 +00:00
										 |  |  | /* LibTomMath, multiple-precision integer library -- Tom St Denis
 | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2003-08-05 01:24:44 +00:00
										 |  |  |  * LibTomMath is a library that provides multiple-precision | 
					
						
							| 
									
										
										
										
											2003-05-17 12:33:54 +00:00
										 |  |  |  * integer arithmetic as well as number theoretic functionality. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2003-08-05 01:24:44 +00:00
										 |  |  |  * The library was designed directly after the MPI library by | 
					
						
							| 
									
										
										
										
											2003-05-17 12:33:54 +00:00
										 |  |  |  * 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. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2007-04-18 09:58:18 +00:00
										 |  |  |  * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
 | 
					
						
							| 
									
										
										
										
											2003-05-17 12:33:54 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | #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. */ | 
					
						
							| 
									
										
										
										
											2003-08-29 14:06:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-29 22:07:18 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-08-01 16:37:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* $Source$ */ | 
					
						
							|  |  |  | /* $Revision$ */ | 
					
						
							|  |  |  | /* $Date$ */ |