floatscan: fix incorrect count of leading nonzero digits
[musl] / src / internal / floatscan.c
index 0e1f6d0..377a008 100644 (file)
@@ -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 (c!='0') lnz = dc;
                        dc++;
+                       if (c!='0') lnz = dc;
                        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:
-               bits = 24;
-               emin = -149;
+               bits = FLT_MANT_DIG;
+               emin = FLT_MIN_EXP-bits;
                break;
        case 1:
-               bits = 53;
-               emin = -1074;
+               bits = DBL_MANT_DIG;
+               emin = DBL_MIN_EXP-bits;
                break;
        case 2:
                bits = LDBL_MANT_DIG;
-               emin = -16445;
+               emin = LDBL_MIN_EXP-bits;
                break;
        default:
                return 0;