(precsize_aton): Better implementation.
authordrepper <drepper>
Thu, 29 May 1997 11:59:55 +0000 (11:59 +0000)
committerdrepper <drepper>
Thu, 29 May 1997 11:59:55 +0000 (11:59 +0000)
resolv/res_debug.c

index fa2ca80..3afe8c2 100644 (file)
@@ -1146,40 +1146,47 @@ static u_int8_t
 precsize_aton(strptr)
        char **strptr;
 {
-       unsigned int mval = 0, cmval = 0;
        u_int8_t retval = 0;
-       register char *cp;
-       register int exponent;
-       register int mantissa;
+       char *cp;
+       int exponent = 0;
+       int mantissa = 0;
 
        cp = *strptr;
+       while (isdigit(*cp)) {
+               if (mantissa == 0)
+                       mantissa = *cp - '0';
+               else
+                       exponent++;
+               cp++;
+       }
 
-       while (isdigit(*cp))
-               mval = mval * 10 + (*cp++ - '0');
-
-       if (*cp == '.') {               /* centimeters */
+       if (*cp == '.') {
                cp++;
                if (isdigit(*cp)) {
-                       cmval = (*cp++ - '0') * 10;
+                       if (mantissa == 0)
+                               mantissa = *cp - '0';
+                       else
+                               exponent++;
+                       cp++;
+
                        if (isdigit(*cp)) {
-                               cmval += (*cp++ - '0');
+                               if (mantissa == 0)
+                                       mantissa = *cp - '0';
+                               else
+                                       exponent++;
+                               cp++;
                        }
+                       else
+                               exponent++;
                }
        }
-       cmval = (mval * 100) + cmval;
-
-       for (exponent = 0; exponent < 9; exponent++)
-               if (cmval < poweroften[exponent+1])
-                       break;
-
-       mantissa = cmval / poweroften[exponent];
-       if (mantissa > 9)
-               mantissa = 9;
+       else
+               exponent += 2;
 
+       if (mantissa == 0)
+               exponent = 0;
        retval = (mantissa << 4) | exponent;
-
        *strptr = cp;
-
        return (retval);
 }