[git commit] bc: bc_num_ulong2num(), bc_program_pushGlobal(), bc_program_stackLen() never fail

Denys Vlasenko vda.linux at googlemail.com
Wed Dec 5 14:43:35 UTC 2018


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

function                                             old     new   delta
bc_num_ulong2num                                      66      62      -4
bc_num_printNum                                      572     563      -9
bc_program_exec                                     4562    4544     -18
bc_program_num                                      1147    1126     -21
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-52)             Total: -52 bytes
   text	   data	    bss	    dec	    hex	filename
 988575	    485	   7296	 996356	  f3404	busybox_old
 988523	    485	   7296	 996304	  f33d0	busybox_unstripped

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

diff --git a/miscutils/bc.c b/miscutils/bc.c
index 221e1529f..25b03a95d 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -299,7 +299,7 @@ static void bc_num_copy(BcNum *d, BcNum *s);
 static void bc_num_free(void *num);
 
 static BcStatus bc_num_ulong(BcNum *n, unsigned long *result);
-static BcStatus bc_num_ulong2num(BcNum *n, unsigned long val);
+static void bc_num_ulong2num(BcNum *n, unsigned long val);
 
 static BcStatus bc_num_add(BcNum *a, BcNum *b, BcNum *c, size_t scale);
 static BcStatus bc_num_sub(BcNum *a, BcNum *b, BcNum *c, size_t scale);
@@ -1404,6 +1404,7 @@ static BcStatus bc_read_file(const char *path, char **buf)
 read_err:
 	free(*buf);
 	return s;
+///convert to better return convention
 }
 
 static void bc_args(int argc, char **argv)
@@ -1469,6 +1470,7 @@ static BcStatus bc_num_subArrays(BcDig *restrict a, BcDig *restrict b,
 			a[i + j] -= 1;
 		}
 	}
+///move ^C detection to bc_num_binary() (can make bc_num_s() return void)
 	return G_interrupt ? BC_STATUS_EXEC_SIGNAL : BC_STATUS_SUCCESS;
 }
 
@@ -1695,6 +1697,7 @@ static BcStatus bc_num_a(BcNum *a, BcNum *b, BcNum *restrict c, size_t sub)
 
 	if (carry != 0) c->num[c->len++] = (BcDig) carry;
 
+///move ^C detection to bc_num_binary()
 	return G_interrupt ? BC_STATUS_EXEC_SIGNAL : BC_STATUS_SUCCESS;
 }
 
@@ -1770,6 +1773,7 @@ static BcStatus bc_num_k(BcNum *restrict a, BcNum *restrict b,
 	BcNum l1, h1, l2, h2, m2, m1, z0, z1, z2, temp;
 	bool aone = BC_NUM_ONE(a);
 
+///move ^C detection to bc_num_binary()
 	if (G_interrupt) return BC_STATUS_EXEC_SIGNAL;
 	if (a->len == 0 || b->len == 0) {
 		bc_num_zero(c);
@@ -1804,6 +1808,7 @@ static BcStatus bc_num_k(BcNum *restrict a, BcNum *restrict b,
 
 		c->len = len;
 
+///move ^C detection to bc_num_binary()
 		return G_interrupt ? BC_STATUS_EXEC_SIGNAL : BC_STATUS_SUCCESS;
 	}
 
@@ -2061,6 +2066,7 @@ static BcStatus bc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size_t scale)
 	}
 
 	if (G_interrupt) {
+///move ^C detection to bc_num_binary()
 		s = BC_STATUS_EXEC_SIGNAL;
 		goto err;
 	}
@@ -2086,6 +2092,7 @@ static BcStatus bc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size_t scale)
 	}
 
 	if (G_interrupt) {
+///move ^C detection to bc_num_binary()
 		s = BC_STATUS_EXEC_SIGNAL;
 		goto err;
 	}
@@ -2135,6 +2142,8 @@ static BcStatus bc_num_binary(BcNum *a, BcNum *b, BcNum *c, size_t scale,
 
 	if (init) bc_num_free(&num2);
 
+///move ^C detection here:
+//	if (s == 0 && G_interrupt) s = BC_STATUS_EXEC_SIGNAL;
 	return s;
 }
 
@@ -2222,8 +2231,7 @@ static void bc_num_parseBase(BcNum *n, const char *val, BcNum *base)
 
 		s = bc_num_mul(n, base, &mult, 0);
 		if (s) goto int_err;
-		s = bc_num_ulong2num(&temp, v);
-		if (s) goto int_err;
+		bc_num_ulong2num(&temp, v);
 		s = bc_num_add(&mult, &temp, n, 0);
 		if (s) goto int_err;
 	}
@@ -2246,8 +2254,7 @@ static void bc_num_parseBase(BcNum *n, const char *val, BcNum *base)
 
 		s = bc_num_mul(&result, base, &result, 0);
 		if (s) goto err;
-		s = bc_num_ulong2num(&temp, v);
-		if (s) goto err;
+		bc_num_ulong2num(&temp, v);
 		s = bc_num_add(&result, &temp, &result, 0);
 		if (s) goto err;
 		s = bc_num_mul(&mult, base, &mult, 0);
@@ -2385,8 +2392,7 @@ static BcStatus bc_num_printNum(BcNum *n, BcNum *base, size_t width,
 		if (s) goto err;
 		s = bc_num_ulong(&fracp, &dig);
 		if (s) goto err;
-		s = bc_num_ulong2num(&intp, dig);
-		if (s) goto err;
+		bc_num_ulong2num(&intp, dig);
 		s = bc_num_sub(&fracp, &intp, &fracp, 0);
 		if (s) goto err;
 		print(dig, width, radix, nchars, len);
@@ -2528,7 +2534,7 @@ static BcStatus bc_num_ulong(BcNum *n, unsigned long *result)
 	return BC_STATUS_SUCCESS;
 }
 
-static BcStatus bc_num_ulong2num(BcNum *n, unsigned long val)
+static void bc_num_ulong2num(BcNum *n, unsigned long val)
 {
 	size_t len;
 	BcDig *ptr;
@@ -2536,12 +2542,10 @@ static BcStatus bc_num_ulong2num(BcNum *n, unsigned long val)
 
 	bc_num_zero(n);
 
-	if (val == 0) return BC_STATUS_SUCCESS;
+	if (val == 0) return;
 
 	for (len = 1, i = ULONG_MAX; i != 0; i /= 10, ++len) bc_num_expand(n, len);
 	for (ptr = n->num, i = 0; val; ++i, ++n->len, val /= 10) ptr[i] = val % 10;
-
-	return BC_STATUS_SUCCESS;
 }
 
 static BcStatus bc_num_add(BcNum *a, BcNum *b, BcNum *c, size_t scale)
@@ -2642,6 +2646,7 @@ static BcStatus bc_num_sqrt(BcNum *a, BcNum *restrict b, size_t scale)
 	resrdx = scale + 2;
 	len = BC_NUM_INT(x0) + resrdx - 1;
 
+///move ^C detection to callers
 	while (!G_interrupt && (cmp != 0 || digs < len)) {
 
 		s = bc_num_div(a, x0, &f, resrdx);
@@ -2671,6 +2676,7 @@ static BcStatus bc_num_sqrt(BcNum *a, BcNum *restrict b, size_t scale)
 	}
 
 	if (G_interrupt) {
+///move ^C detection to callers
 		s = BC_STATUS_EXEC_SIGNAL;
 		goto err;
 	}
@@ -6148,7 +6154,7 @@ static BcStatus bc_program_builtin(char inst)
 	if (inst == BC_INST_SQRT) s = bc_num_sqrt(num, &res.d.n, G.prog.scale);
 #if ENABLE_BC
 	else if (len != 0 && opnd->t == BC_RESULT_ARRAY) {
-		s = bc_num_ulong2num(&res.d.n, (unsigned long) ((BcVec *) num)->len);
+		bc_num_ulong2num(&res.d.n, (unsigned long) ((BcVec *) num)->len);
 	}
 #endif
 #if ENABLE_DC
@@ -6158,23 +6164,17 @@ static BcStatus bc_program_builtin(char inst)
 		size_t idx = opnd->t == BC_RESULT_STR ? opnd->d.id.idx : num->rdx;
 
 		str = bc_vec_item(&G.prog.strs, idx);
-		s = bc_num_ulong2num(&res.d.n, strlen(*str));
-		if (s) goto err;
+		bc_num_ulong2num(&res.d.n, strlen(*str));
 	}
 #endif
 	else {
 		BcProgramBuiltIn f = len ? bc_program_len : bc_program_scale;
-		s = bc_num_ulong2num(&res.d.n, f(num));
-		if (s) goto err;
+		bc_num_ulong2num(&res.d.n, f(num));
 	}
 
 	bc_program_retire(&res, BC_RESULT_TEMP);
 
 	return s;
-
-err:
-	bc_num_free(&res.d.n);
-	return s;
 }
 
 #if ENABLE_DC
@@ -6248,24 +6248,16 @@ err:
 	return s;
 }
 
-static BcStatus bc_program_stackLen(void)
+static void bc_program_stackLen(void)
 {
-	BcStatus s;
 	BcResult res;
 	size_t len = G.prog.results.len;
 
 	res.t = BC_RESULT_TEMP;
 
 	bc_num_init(&res.d.n, BC_NUM_DEF_SIZE);
-	s = bc_num_ulong2num(&res.d.n, len);
-	if (s) goto err;
+	bc_num_ulong2num(&res.d.n, len);
 	bc_vec_push(&G.prog.results, &res);
-
-	return s;
-
-err:
-	bc_num_free(&res.d.n);
-	return s;
 }
 
 static BcStatus bc_program_asciify(void)
@@ -6490,9 +6482,8 @@ exit:
 }
 #endif // ENABLE_DC
 
-static BcStatus bc_program_pushGlobal(char inst)
+static void bc_program_pushGlobal(char inst)
 {
-	BcStatus s;
 	BcResult res;
 	unsigned long val;
 
@@ -6505,15 +6496,8 @@ static BcStatus bc_program_pushGlobal(char inst)
 		val = (unsigned long) G.prog.ob_t;
 
 	bc_num_init(&res.d.n, BC_NUM_DEF_SIZE);
-	s = bc_num_ulong2num(&res.d.n, val);
-	if (s) goto err;
+	bc_num_ulong2num(&res.d.n, val);
 	bc_vec_push(&G.prog.results, &res);
-
-	return s;
-
-err:
-	bc_num_free(&res.d.n);
-	return s;
 }
 
 static void bc_program_addFunc(char *name, size_t *idx)
@@ -6682,7 +6666,7 @@ static BcStatus bc_program_exec(void)
 			case BC_INST_SCALE:
 			case BC_INST_OBASE:
 			{
-				s = bc_program_pushGlobal(inst);
+				bc_program_pushGlobal(inst);
 				break;
 			}
 
@@ -6811,7 +6795,7 @@ static BcStatus bc_program_exec(void)
 
 			case BC_INST_STACK_LEN:
 			{
-				s = bc_program_stackLen();
+				bc_program_stackLen();
 				break;
 			}
 


More information about the busybox-cvs mailing list