From c4603fb09aa2ec06bc8c0ad51b69fe7995a8ea17 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Mon, 25 May 2015 13:31:25 +0200 Subject: dc: fix "dc p" prinitng bogus data 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 --- miscutils/dc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'miscutils/dc.c') diff --git a/miscutils/dc.c b/miscutils/dc.c index f94d6fa6b..9c74172ba 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]); } -- cgit v1.2.3