summaryrefslogtreecommitdiff
path: root/lib/vasnprintf.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2007-05-18 23:35:38 +0000
committerBruno Haible <bruno@clisp.org>2007-05-18 23:35:38 +0000
commit7f5e623b09aeb3ea32039bb45bcce22a598615d5 (patch)
treed6f86818450c004c511f841ea3622c78e1a9b781 /lib/vasnprintf.c
parent13123792653a8fd7b15725fcaddcdb18b2efa5ea (diff)
downloadgnulib-7f5e623b09aeb3ea32039bb45bcce22a598615d5.tar.gz
Fix small bug in 'divide' function.
Diffstat (limited to 'lib/vasnprintf.c')
-rw-r--r--lib/vasnprintf.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
index fdca886851..f67211b95f 100644
--- a/lib/vasnprintf.c
+++ b/lib/vasnprintf.c
@@ -623,19 +623,19 @@ divide (mpn_t a, mpn_t b, mpn_t *q)
goto increment_q;
{
size_t i;
- for (i = b_len; i > 0; )
+ for (i = b_len;;)
{
+ mp_limb_t r_i =
+ (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0)
+ | (i < r_len ? r_ptr[i] << 1 : 0);
+ mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0);
+ if (r_i > b_i)
+ goto increment_q;
+ if (r_i < b_i)
+ goto keep_q;
+ if (i == 0)
+ break;
i--;
- {
- mp_limb_t r_i =
- (i + 1 < r_len ? r_ptr[i + 1] >> (GMP_LIMB_BITS - 1) : 0)
- | (i < r_len ? r_ptr[i] << 1 : 0);
- mp_limb_t b_i = b_ptr[i];
- if (r_i > b_i)
- goto increment_q;
- if (r_i < b_i)
- goto keep_q;
- }
}
}
if (q_len > 0 && ((q_ptr[0] & 1) != 0))