summaryrefslogtreecommitdiff
path: root/mpz
diff options
context:
space:
mode:
authortege <tege@gmplib.org>1999-02-22 23:17:55 +0100
committertege <tege@gmplib.org>1999-02-22 23:17:55 +0100
commita521b267a6797f9a37ebcc65d99abeb9ff86743b (patch)
tree6e4192450bc0117d98112069e7f1acdc4161bf71 /mpz
parent89fcd6cd234b7b4aebc5275ebddbd536442b866b (diff)
downloadgmp-a521b267a6797f9a37ebcc65d99abeb9ff86743b.tar.gz
Defer writing to parameter `invert' until end.
Diffstat (limited to 'mpz')
-rw-r--r--mpz/invert.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/mpz/invert.c b/mpz/invert.c
index 4c3b0f386..9de39faba 100644
--- a/mpz/invert.c
+++ b/mpz/invert.c
@@ -33,7 +33,7 @@ mpz_invert (inverse, x, n)
mpz_srcptr x, n;
#endif
{
- mpz_t gcd;
+ mpz_t gcd, tmp;
mp_size_t xsize, nsize, size;
xsize = SIZ (x);
@@ -48,19 +48,23 @@ mpz_invert (inverse, x, n)
return 0;
MPZ_TMP_INIT (gcd, size);
- mpz_gcdext (gcd, inverse, (mpz_ptr) 0, x, n);
+ MPZ_TMP_INIT (tmp, size);
+ mpz_gcdext (gcd, tmp, (mpz_ptr) 0, x, n);
/* If no inverse existed, return with an indication of that. */
if (gcd->_mp_size != 1 || (gcd->_mp_d)[0] != 1)
return 0;
/* Make sure we return a positive inverse. */
- if (SIZ (inverse) < 0)
+ if (SIZ (tmp) < 0)
{
if (SIZ (n) < 0)
- mpz_sub (inverse, inverse, n);
+ mpz_sub (inverse, tmp, n);
else
- mpz_add (inverse, inverse, n);
+ mpz_add (inverse, tmp, n);
}
+ else
+ mpz_set (inverse, tmp);
+
return 1;
}