diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-10 15:38:52 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-10 15:38:52 +0100 |
commit | dafbc2cdb8825ed36a25f9a6275d5226f35d3bd3 (patch) | |
tree | 9f9535fb5d0fa988ca33595a593b99bb95ac8694 | |
parent | 5ba55f1f356f3521d2b366d6d7af60c5e05563a8 (diff) | |
download | busybox-w32-dafbc2cdb8825ed36a25f9a6275d5226f35d3bd3.tar.gz busybox-w32-dafbc2cdb8825ed36a25f9a6275d5226f35d3bd3.tar.bz2 busybox-w32-dafbc2cdb8825ed36a25f9a6275d5226f35d3bd3.zip |
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>
-rw-r--r-- | miscutils/bc.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index 7ed6dd91d..26ab94cbd 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c | |||
@@ -2395,19 +2395,11 @@ static void bc_num_parseDecimal(BcNum *n, const char *val) | |||
2395 | { | 2395 | { |
2396 | size_t len, i; | 2396 | size_t len, i; |
2397 | const char *ptr; | 2397 | const char *ptr; |
2398 | bool zero; | ||
2399 | 2398 | ||
2400 | len = strlen(val); | 2399 | len = strlen(val); |
2401 | if (len == 0) | 2400 | if (len == 0) |
2402 | return; | 2401 | return; |
2403 | 2402 | ||
2404 | zero = true; | ||
2405 | for (i = 0; val[i]; ++i) { | ||
2406 | if (val[i] != '0' && val[i] != '.') { | ||
2407 | zero = false; | ||
2408 | break; | ||
2409 | } | ||
2410 | } | ||
2411 | bc_num_expand(n, len); | 2403 | bc_num_expand(n, len); |
2412 | 2404 | ||
2413 | ptr = strchr(val, '.'); | 2405 | ptr = strchr(val, '.'); |
@@ -2416,16 +2408,21 @@ static void bc_num_parseDecimal(BcNum *n, const char *val) | |||
2416 | if (ptr != NULL) | 2408 | if (ptr != NULL) |
2417 | n->rdx = (size_t)((val + len) - (ptr + 1)); | 2409 | n->rdx = (size_t)((val + len) - (ptr + 1)); |
2418 | 2410 | ||
2419 | if (!zero) { | 2411 | for (i = 0; val[i]; ++i) { |
2420 | i = len - 1; | 2412 | if (val[i] != '0' && val[i] != '.') { |
2421 | for (;;) { | 2413 | // Not entirely zero value - convert it, and exit |
2422 | n->num[n->len] = val[i] - '0'; | 2414 | i = len - 1; |
2423 | ++n->len; | 2415 | for (;;) { |
2416 | n->num[n->len] = val[i] - '0'; | ||
2417 | ++n->len; | ||
2424 | skip_dot: | 2418 | skip_dot: |
2425 | if ((ssize_t)--i == (ssize_t)-1) break; | 2419 | if ((ssize_t)--i == (ssize_t)-1) break; |
2426 | if (val[i] == '.') goto skip_dot; | 2420 | if (val[i] == '.') goto skip_dot; |
2421 | } | ||
2422 | break; | ||
2427 | } | 2423 | } |
2428 | } | 2424 | } |
2425 | // if this is reached, the value is entirely zero | ||
2429 | } | 2426 | } |
2430 | 2427 | ||
2431 | // Note: n is already "bc_num_zero()"ed, | 2428 | // Note: n is already "bc_num_zero()"ed, |