[git commit] bc: further simplify string-to-number conversion code

Denys Vlasenko vda.linux at googlemail.com
Sun Dec 9 12:33:52 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=218ed1cf5466a37ade2a319e9335fb2c1ff19252
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
bc_program_index                                      66      64      -2
bc_program_num                                       983     963     -20
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-22)             Total: -22 bytes
   text	   data	    bss	    dec	    hex	filename
 985706	    477	   7296	 993479	  f28c7	busybox_old
 985684	    477	   7296	 993457	  f28b1	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 miscutils/bc.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/miscutils/bc.c b/miscutils/bc.c
index c36486414..ca9506929 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -2246,8 +2246,14 @@ static void bc_num_parseDecimal(BcNum *n, const char *val)
 		n->rdx = (size_t)((val + len) - (ptr + 1));
 
 	if (!zero) {
-		for (i = len - 1; i < len; ++n->len, i -= 1 + (i && val[i - 1] == '.'))
+		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;
+		}
 	}
 }
 


More information about the busybox-cvs mailing list