[git commit] bc: do not disallow powers to N.0000 degree - it's even shorter code

Denys Vlasenko vda.linux at googlemail.com
Sat Dec 22 20:45:18 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=2ea8ddf8c245dd160eacf35409572c28345506f7
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
zbc_num_p                                            440     424     -16

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

diff --git a/miscutils/bc.c b/miscutils/bc.c
index 876244b34..d7595ce8e 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -2089,7 +2089,8 @@ static FAST_FUNC BC_STATUS zbc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size
 	size_t i, powrdx, resrdx;
 	bool neg;
 
-	if (b->rdx) RETURN_STATUS(bc_error("non integer number"));
+// GNU bc does not allow 2^2.0. We do.
+//	if (b->rdx) RETURN_STATUS(bc_error("non integer number"));
 
 	if (b->len == 0) {
 		bc_num_one(c);
@@ -2109,9 +2110,10 @@ static FAST_FUNC BC_STATUS zbc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size
 
 	neg = b->neg;
 	b->neg = false;
-
 	s = zbc_num_ulong(b, &pow);
+	b->neg = neg;
 	if (s) RETURN_STATUS(s);
+	// b is not used beyond this point
 
 	bc_num_init(&copy, a->len);
 	bc_num_copy(&copy, a);
@@ -2123,7 +2125,6 @@ static FAST_FUNC BC_STATUS zbc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size
 			scale = a->rdx * pow;
 	}
 
-	b->neg = neg;
 
 	for (powrdx = a->rdx; !(pow & 1); pow >>= 1) {
 		powrdx <<= 1;


More information about the busybox-cvs mailing list