[git commit] dc: code shrink

Denys Vlasenko vda.linux at googlemail.com
Thu May 9 13:58:46 UTC 2019


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

function                                             old     new   delta
check_under                                           20      21      +1
print_no_pop                                          32      27      -5
pop                                                   24      18      -6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/2 up/down: 1/-11)             Total: -10 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 miscutils/dc.c | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/miscutils/dc.c b/miscutils/dc.c
index 17fdda8fd..5119c1383 100644
--- a/miscutils/dc.c
+++ b/miscutils/dc.c
@@ -35,10 +35,12 @@ enum { STACK_SIZE = (COMMON_BUFSIZE - offsetof(struct globals, stack)) / sizeof(
 	base = 10; \
 } while (0)
 
-static void check_under(void)
+static unsigned check_under(void)
 {
-	if (pointer == 0)
+	unsigned p = pointer;
+	if (p == 0)
 		bb_error_msg_and_die("stack underflow");
+	return p - 1;
 }
 
 static void push(double a)
@@ -50,8 +52,9 @@ static void push(double a)
 
 static double pop(void)
 {
-	check_under();
-	return stack[--pointer];
+	unsigned p = check_under();
+	pointer = p;
+	return stack[p];
 }
 
 static void add(void)
@@ -91,6 +94,14 @@ static void mod(void)
 {
 	data_t d = pop();
 
+	//if (d == 0) {
+	//	bb_error_msg("remainder by zero");
+	//	pop();
+	//	push(0);
+	//	return;
+	//}
+	//^^^^ without this, we simply get SIGFPE and die
+
 	push((data_t) pop() % d);
 }
 
@@ -171,8 +182,7 @@ static void print_stack_no_pop(void)
 
 static void print_no_pop(void)
 {
-	check_under();
-	print_base(stack[pointer-1]);
+	print_base(stack[check_under()]);
 }
 
 struct op {


More information about the busybox-cvs mailing list