summaryrefslogtreecommitdiff
path: root/mpz/get_si.c
diff options
context:
space:
mode:
authortege <tege@gmplib.org>2002-04-16 23:26:39 +0200
committertege <tege@gmplib.org>2002-04-16 23:26:39 +0200
commit5c894ae514eacbac1efb34da1baf0cd4f0733cf4 (patch)
tree34ea55109ae11a28b3b57bf6cd6173685c7e9cc2 /mpz/get_si.c
parent2df1b7f8b38aea6cdb42873d5e30ffd364fda2e3 (diff)
downloadgmp-5c894ae514eacbac1efb34da1baf0cd4f0733cf4.tar.gz
Nailify.
Diffstat (limited to 'mpz/get_si.c')
-rw-r--r--mpz/get_si.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/mpz/get_si.c b/mpz/get_si.c
index 7783eafb3..94e6b8865 100644
--- a/mpz/get_si.c
+++ b/mpz/get_si.c
@@ -23,10 +23,18 @@ MA 02111-1307, USA. */
#include "gmp-impl.h"
signed long int
-mpz_get_si (mpz_srcptr op)
+mpz_get_si (mpz_srcptr z)
{
- mp_size_t size = op->_mp_size;
- mp_limb_t low_limb = op->_mp_d[0];
+ mp_ptr zp = z->_mp_d;
+ mp_size_t size = z->_mp_size;
+ mp_limb_t low_limb = zp[0];
+
+ if (ULONG_MAX > GMP_NUMB_MAX != 0 && ABS (size) >= 2)
+ {
+ /* happens for nails, but not if LONG_LONG_LIMB */
+ /* assume two limbs are enough to fill an ulong */
+ low_limb += zp[1] << GMP_NUMB_BITS;
+ }
if (size > 0)
return (long) low_limb & LONG_MAX;