diff options
author | Bruno Haible <bruno@clisp.org> | 2007-05-18 23:35:38 +0000 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2007-05-18 23:35:38 +0000 |
commit | 7f5e623b09aeb3ea32039bb45bcce22a598615d5 (patch) | |
tree | d6f86818450c004c511f841ea3622c78e1a9b781 /lib/vasnprintf.c | |
parent | 13123792653a8fd7b15725fcaddcdb18b2efa5ea (diff) | |
download | gnulib-7f5e623b09aeb3ea32039bb45bcce22a598615d5.tar.gz |
Fix small bug in 'divide' function.
Diffstat (limited to 'lib/vasnprintf.c')
-rw-r--r-- | lib/vasnprintf.c | 22 |
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)) |