projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix wide scanf's handling of input failure on %c, and simplify %[
[musl]
/
src
/
internal
/
floatscan.c
diff --git
a/src/internal/floatscan.c
b/src/internal/floatscan.c
index
0e1f6d0
..
da209e2
100644
(file)
--- a/
src/internal/floatscan.c
+++ b/
src/internal/floatscan.c
@@
-81,8
+81,8
@@
static long double decfloat(FILE *f, int c, int bits, int emin, int sign, int po
if (lrp!=-1) break;
lrp = dc;
} else if (k < KMAX-2) {
if (lrp!=-1) break;
lrp = dc;
} else if (k < KMAX-2) {
- if (c!='0') lnz = dc;
dc++;
dc++;
+ if (c!='0') lnz = dc;
if (j) x[k] = x[k]*10 + c-'0';
else x[k] = c-'0';
if (++j==9) {
if (j) x[k] = x[k]*10 + c-'0';
else x[k] = c-'0';
if (++j==9) {
@@
-403,16
+403,16
@@
long double __floatscan(FILE *f, int c, int prec, int pok)
switch (prec) {
case 0:
switch (prec) {
case 0:
- bits =
24
;
- emin =
-149
;
+ bits =
FLT_MANT_DIG
;
+ emin =
FLT_MIN_EXP-bits
;
break;
case 1:
break;
case 1:
- bits =
53
;
- emin =
-1074
;
+ bits =
DBL_MANT_DIG
;
+ emin =
DBL_MIN_EXP-bits
;
break;
case 2:
bits = LDBL_MANT_DIG;
break;
case 2:
bits = LDBL_MANT_DIG;
- emin =
-16445
;
+ emin =
LDBL_MIN_EXP-bits
;
break;
default:
return 0;
break;
default:
return 0;
@@
-428,9
+428,10
@@
long double __floatscan(FILE *f, int c, int prec, int pok)
for (i=0; i<8 && (c|32)=="infinity"[i]; i++)
if (i<7) c = shgetc(f);
if (i==3 || i==8 || (i>3 && pok)) {
for (i=0; i<8 && (c|32)=="infinity"[i]; i++)
if (i<7) c = shgetc(f);
if (i==3 || i==8 || (i>3 && pok)) {
- if (i==3) shunget(f);
- if (pok) for (; i>3; i--) shunget(f);
- else shlim(f, 0);
+ if (i!=8) {
+ shunget(f);
+ if (pok) for (; i>3; i--) shunget(f);
+ }
return sign * INFINITY;
}
if (!i) for (i=0; i<3 && (c|32)=="nan"[i]; i++)
return sign * INFINITY;
}
if (!i) for (i=0; i<3 && (c|32)=="nan"[i]; i++)