diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-06-13 19:07:13 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-06-13 19:07:13 (GMT) |
commit | 505f963287b050bd46871d4659cebc65986ca5ac (patch) | |
tree | 853ad3262ab07f7c5755e76b8154f36f24608014 /libtommath/bn_mp_incr.c | |
parent | 689987ea924a8fded1801777c1a14ab1205fa826 (diff) | |
download | tcl-505f963287b050bd46871d4659cebc65986ca5ac.zip tcl-505f963287b050bd46871d4659cebc65986ca5ac.tar.gz tcl-505f963287b050bd46871d4659cebc65986ca5ac.tar.bz2 |
Update to latest libtommath's "develop" branch. On the way to 1.2.0
Diffstat (limited to 'libtommath/bn_mp_incr.c')
-rw-r--r-- | libtommath/bn_mp_incr.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/libtommath/bn_mp_incr.c b/libtommath/bn_mp_incr.c new file mode 100644 index 0000000..5d0039e --- /dev/null +++ b/libtommath/bn_mp_incr.c @@ -0,0 +1,30 @@ +#include "tommath_private.h" +#ifdef BN_MP_INCR_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis */ +/* SPDX-License-Identifier: Unlicense */ + +/* Increment "a" by one like "a++". Changes input! */ +mp_err mp_incr(mp_int *a) +{ + if (MP_IS_ZERO(a)) { + mp_set(a,1uL); + return MP_OKAY; + } else if (a->sign == MP_NEG) { + mp_err err; + a->sign = MP_ZPOS; + if ((err = mp_decr(a)) != MP_OKAY) { + return err; + } + /* There is no -0 in LTM */ + if (!MP_IS_ZERO(a)) { + a->sign = MP_NEG; + } + return MP_OKAY; + } else if (a->dp[0] < MP_MASK) { + a->dp[0]++; + return MP_OKAY; + } else { + return mp_add_d(a, 1uL,a); + } +} +#endif |