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:
parent
5ba55f1f35
commit
dafbc2cdb8
@ -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,16 +2408,21 @@ 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) {
|
||||||
i = len - 1;
|
if (val[i] != '0' && val[i] != '.') {
|
||||||
for (;;) {
|
// Not entirely zero value - convert it, and exit
|
||||||
n->num[n->len] = val[i] - '0';
|
i = len - 1;
|
||||||
++n->len;
|
for (;;) {
|
||||||
|
n->num[n->len] = val[i] - '0';
|
||||||
|
++n->len;
|
||||||
skip_dot:
|
skip_dot:
|
||||||
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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user