simplify/debloat radix point alignment code in floatscan
[musl] / src / internal / floatscan.c
index d5444da..6390d46 100644 (file)
@@ -77,7 +77,7 @@ static long double decfloat(FILE *f, int c, int bits, int emin, int sign, int po
                if (c == '.') {
                        if (lrp!=-1) break;
                        lrp = dc;
-               } else if (k < KMAX) {
+               } else if (k < KMAX-2) {
                        dc++;
                        if (j) x[k] = x[k]*10 + c-'0';
                        else x[k] = c-'0';
@@ -88,7 +88,7 @@ static long double decfloat(FILE *f, int c, int bits, int emin, int sign, int po
                        gotdig=1;
                } else {
                        dc++;
-                       x[KMAX-1] |= c-'0';
+                       if (c!='0') x[KMAX-3] |= 1;
                }
        }
        if (lrp==-1) lrp=dc;
@@ -146,7 +146,7 @@ static long double decfloat(FILE *f, int c, int bits, int emin, int sign, int po
                int rpm9 = rp>=0 ? rp%9 : rp%9+9;
                int p10 = p10s[rpm9-1];
                uint32_t carry = 0;
-               for (k=a; k!=z; k=(k+1 & MASK)) {
+               for (k=a; k!=z; k++) {
                        uint32_t tmp = x[k] % p10;
                        x[k] = x[k]/p10 + carry;
                        carry = 1000000000/p10 * tmp;
@@ -155,12 +155,7 @@ static long double decfloat(FILE *f, int c, int bits, int emin, int sign, int po
                                rp -= 9;
                        }
                }
-               if (carry) {
-                       if ((z+1 & MASK) != a) {
-                               x[z] = carry;
-                               z = (z+1 & MASK);
-                       } else x[z-1 & MASK] |= 1;
-               }
+               if (carry) x[z++] = carry;
                rp += 9-rpm9;
        }