[git commit] dc: fix "dc p" prinitng bogus data

Denys Vlasenko vda.linux at googlemail.com
Mon May 25 11:31:25 UTC 2015


commit: http://git.busybox.net/busybox/commit/?id=c4603fb09aa2ec06bc8c0ad51b69fe7995a8ea17
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
check_under                                            -      20     +20
print_no_pop                                          27      32      +5
pop                                                   33      24      -9
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/1 up/down: 25/-9)              Total: 16 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 miscutils/dc.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/miscutils/dc.c b/miscutils/dc.c
index f94d6fa..9c74172 100644
--- a/miscutils/dc.c
+++ b/miscutils/dc.c
@@ -56,6 +56,12 @@ enum { STACK_SIZE = (COMMON_BUFSIZE - offsetof(struct globals, stack)) / sizeof(
 } while (0)
 
 
+static void check_under(void)
+{
+	if (pointer == 0)
+		bb_error_msg_and_die("stack underflow");
+}
+
 static void push(double a)
 {
 	if (pointer >= STACK_SIZE)
@@ -65,8 +71,7 @@ static void push(double a)
 
 static double pop(void)
 {
-	if (pointer == 0)
-		bb_error_msg_and_die("stack underflow");
+	check_under();
 	return stack[--pointer];
 }
 
@@ -187,6 +192,7 @@ static void print_stack_no_pop(void)
 
 static void print_no_pop(void)
 {
+	check_under();
 	print_base(stack[pointer-1]);
 }
 


More information about the busybox-cvs mailing list