diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-02-11 11:59:55 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-02-11 11:59:55 +0000 |
commit | 1eb687d0b865ea0d97bb774b23a764f1c4369475 (patch) | |
tree | 87aaeeb9bcc74de26af7fda8762c2ff717414f73 /misc/efgcvt_r.c | |
parent | 3ec27a876c591a89998aeb89e7ccd1db45b7fb39 (diff) | |
download | glibc-1eb687d0b865ea0d97bb774b23a764f1c4369475.zip glibc-1eb687d0b865ea0d97bb774b23a764f1c4369475.tar.gz glibc-1eb687d0b865ea0d97bb774b23a764f1c4369475.tar.bz2 |
Update.
1998-02-11 19:16 Richard Henderson <rth@cygnus.com>
* stdlib/strtod.c (STRTOF): Don't call lshift with zero count.
* isomac.c: Move to...
* stdlib/isomac.c: ...here.
* Makefile: Move rules for handling isomac...
* stdlib/Makefile: ...to here.
Diffstat (limited to 'misc/efgcvt_r.c')
-rw-r--r-- | misc/efgcvt_r.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/misc/efgcvt_r.c b/misc/efgcvt_r.c index f6bd988..9e586e1 100644 --- a/misc/efgcvt_r.c +++ b/misc/efgcvt_r.c @@ -49,6 +49,7 @@ APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len) size_t len; { int n, i; + int left; if (buf == NULL) { @@ -56,6 +57,7 @@ APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len) return -1; } + left = 0; if (isfinite (value)) { *sign = signbit (value) != 0; @@ -65,10 +67,20 @@ APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len) if (ndigit < 0) { /* Rounding to the left of the decimal point. */ - for (i = ndigit; i < 0; i++) - value *= 0.1; + while (ndigit < 0) + { + FLOAT_TYPE new_value = value * 0.1; - ndigit = 0; + if (new_value < 1.0) + { + ndigit = 0; + break; + } + + value = new_value; + ++left; + ++ndigit; + } } } else @@ -110,6 +122,17 @@ APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len) buf[n - (i - MAX (*decpt, 0))] = '\0'; } + if (left) + { + *decpt += left; + if (--len > n) + { + while (left-- > 0 && n < len) + buf[n++] = '0'; + buf[n] = '\0'; + } + } + return 0; } |