bc: simplify bc_num_parseDecimal() further
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 10 Dec 2018 14:38:52 +0000 (15:38 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 10 Dec 2018 14:38:52 +0000 (15:38 +0100)
function                                             old     new   delta
bc_program_num                                       925     912     -13

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/bc.c

index 7ed6dd91d2901be50c8315e2c07443371618ddcd..26ab94cbda9f8bf72e7c63ac01e3e429616b4f98 100644 (file)
@@ -2395,19 +2395,11 @@ static void bc_num_parseDecimal(BcNum *n, const char *val)
 {
        size_t len, i;
        const char *ptr;
-       bool zero;
 
        len = strlen(val);
        if (len == 0)
                return;
 
-       zero = true;
-       for (i = 0; val[i]; ++i) {
-               if (val[i] != '0' && val[i] != '.') {
-                       zero = false;
-                       break;
-               }
-       }
        bc_num_expand(n, len);
 
        ptr = strchr(val, '.');
@@ -2416,16 +2408,21 @@ static void bc_num_parseDecimal(BcNum *n, const char *val)
        if (ptr != NULL)
                n->rdx = (size_t)((val + len) - (ptr + 1));
 
-       if (!zero) {
-               i = len - 1;
-               for (;;) {
-                       n->num[n->len] = val[i] - '0';
-                       ++n->len;
+       for (i = 0; val[i]; ++i) {
+               if (val[i] != '0' && val[i] != '.') {
+                       // Not entirely zero value - convert it, and exit
+                       i = len - 1;
+                       for (;;) {
+                               n->num[n->len] = val[i] - '0';
+                               ++n->len;
  skip_dot:
-                       if ((ssize_t)--i == (ssize_t)-1) break;
-                       if (val[i] == '.') goto skip_dot;
+                               if ((ssize_t)--i == (ssize_t)-1) break;
+                               if (val[i] == '.') goto skip_dot;
+                       }
+                       break;
                }
        }
+       // if this is reached, the value is entirely zero
 }
 
 // Note: n is already "bc_num_zero()"ed,