bc: simplify bc_num_parseDecimal() further

function                                             old     new   delta
bc_program_num                                       925     912     -13

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-12-10 15:38:52 +01:00
parent 5ba55f1f35
commit dafbc2cdb8

View File

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