OSDN Git Service

Please enter the commit message for your changes. Lines starting
[eos/base.git] / util / src / TclTk / tcl8.6.12 / libtommath / bn_mp_copy.c
1 #include "tommath_private.h"
2 #ifdef BN_MP_COPY_C
3 /* LibTomMath, multiple-precision integer library -- Tom St Denis */
4 /* SPDX-License-Identifier: Unlicense */
5
6 /* copy, b = a */
7 mp_err mp_copy(const mp_int *a, mp_int *b)
8 {
9    int n;
10    mp_digit *tmpa, *tmpb;
11    mp_err err;
12
13    /* if dst == src do nothing */
14    if (a == b) {
15       return MP_OKAY;
16    }
17
18    /* grow dest */
19    if (b->alloc < a->used) {
20       if ((err = mp_grow(b, a->used)) != MP_OKAY) {
21          return err;
22       }
23    }
24
25    /* zero b and copy the parameters over */
26    /* pointer aliases */
27
28    /* source */
29    tmpa = a->dp;
30
31    /* destination */
32    tmpb = b->dp;
33
34    /* copy all the digits */
35    for (n = 0; n < a->used; n++) {
36       *tmpb++ = *tmpa++;
37    }
38
39    /* clear high digits */
40    MP_ZERO_DIGITS(tmpb, b->used - n);
41
42    /* copy used count and sign */
43    b->used = a->used;
44    b->sign = a->sign;
45    return MP_OKAY;
46 }
47 #endif