瀏覽代碼

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 <vda.linux@googlemail.com>
Denys Vlasenko 9 年之前
父節點
當前提交
c4603fb09a
共有 1 個文件被更改,包括 8 次插入2 次删除
  1. 8 2
      miscutils/dc.c

+ 8 - 2
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]);
 }