Edit

kc3-lang/libtommath/bn_mp_init_multi.c

Branch :

  • Show log

    Commit

  • Author : Steffen Jaeckel
    Date : 2017-12-18 23:37:01
    Hash : a7688505
    Message : improve generated output

  • bn_mp_init_multi.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.
     *
     * Tom St Denis, tstdenis82@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;
    
             /* 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$ */