dc: fix "dc p" prinitng bogus data
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 25 May 2015 11:31:25 +0000 (13:31 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 25 May 2015 11:31:25 +0000 (13:31 +0200)
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@googlemail.com>
miscutils/dc.c

index f94d6fa6b301c17119cfe0bcabfc6c227c24e880..9c74172ba4f41dafef23b562ae527e28008bb2b4 100644 (file)
@@ -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]);
 }