diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-06-13 21:28:11 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-06-13 21:28:11 (GMT) |
commit | db7fa65dce753b80d5f2a87799aabd481e9144a2 (patch) | |
tree | 40a8affd6eb84a709b158e4c1f5e4117e9f18171 /libtommath/bn_mp_decr.c | |
parent | 233d558b1e7e820960a3db26cd2aedcf036ead9e (diff) | |
parent | 505f963287b050bd46871d4659cebc65986ca5ac (diff) | |
download | tcl-db7fa65dce753b80d5f2a87799aabd481e9144a2.zip tcl-db7fa65dce753b80d5f2a87799aabd481e9144a2.tar.gz tcl-db7fa65dce753b80d5f2a87799aabd481e9144a2.tar.bz2 |
Merge libtommath
Diffstat (limited to 'libtommath/bn_mp_decr.c')
-rw-r--r-- | libtommath/bn_mp_decr.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/libtommath/bn_mp_decr.c b/libtommath/bn_mp_decr.c new file mode 100644 index 0000000..c6a1572 --- /dev/null +++ b/libtommath/bn_mp_decr.c @@ -0,0 +1,34 @@ +#include "tommath_private.h" +#ifdef BN_MP_DECR_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis */ +/* SPDX-License-Identifier: Unlicense */ + +/* Decrement "a" by one like "a--". Changes input! */ +mp_err mp_decr(mp_int *a) +{ + if (MP_IS_ZERO(a)) { + mp_set(a,1uL); + a->sign = MP_NEG; + return MP_OKAY; + } else if (a->sign == MP_NEG) { + mp_err err; + a->sign = MP_ZPOS; + if ((err = mp_incr(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] > 1uL) { + a->dp[0]--; + if (a->dp[0] == 0u) { + mp_zero(a); + } + return MP_OKAY; + } else { + return mp_sub_d(a, 1uL,a); + } +} +#endif |