aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-12-10 15:38:52 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-12-10 15:38:52 +0100
commitdafbc2cdb8825ed36a25f9a6275d5226f35d3bd3 (patch)
tree9f9535fb5d0fa988ca33595a593b99bb95ac8694
parent5ba55f1f356f3521d2b366d6d7af60c5e05563a8 (diff)
downloadbusybox-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.c27
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,