diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-03-24 17:06:51 +0300 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-03-24 17:06:51 +0300 |
commit | 5b27fbe990d868441452c474e5b14e94f8bc8335 (patch) | |
tree | c6a7e85b1d6d1c8e18089c3f7d83e392cf04448f /miscutils/dc.c | |
parent | b5b45a91f0f2d3f57864b49eb3126c9eb6a2b1eb (diff) |
dc: use common_bufsiz1 for evaluation stack
msh: fix "underscore bug" (a_b=1111 didn't work)
dnsd: openlog(), so that applet's name is logged
Diffstat (limited to 'miscutils/dc.c')
-rw-r--r-- | miscutils/dc.c | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/miscutils/dc.c b/miscutils/dc.c index 2121f7669..8c9d77fc3 100644 --- a/miscutils/dc.c +++ b/miscutils/dc.c @@ -4,22 +4,19 @@ */ #include "busybox.h" -#include <ctype.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> #include <math.h> /* Tiny RPN calculator, because "expr" didn't give me bitwise operations. */ -static double stack[100]; +enum { STACK_SIZE = sizeof(bb_common_bufsiz1) / sizeof(double) }; + +#define stack ((double*)&bb_common_bufsiz1) static unsigned int pointer; static unsigned char base; static void push(double a) { - if (pointer >= (sizeof(stack) / sizeof(*stack))) + if (pointer >= STACK_SIZE) bb_error_msg_and_die("stack overflow"); stack[pointer++] = a; } @@ -91,10 +88,10 @@ static void not(void) static void set_output_base(void) { - base=(unsigned char)pop(); + base = (unsigned char)pop(); if ((base != 10) && (base != 16)) { - fprintf(stderr, "Error: base = %d is not supported.\n", base); - base=10; + bb_error_msg("error, base %d is not supported", base); + base = 10; } } @@ -103,12 +100,12 @@ static void print_base(double print) if (base == 16) printf("%x\n", (unsigned int)print); else - printf("%g\n", print); + printf("%g\n", print); } static void print_stack_no_pop(void) { - unsigned int i=pointer; + unsigned int i = pointer; while (i) print_base(stack[--i]); } @@ -119,7 +116,7 @@ static void print_no_pop(void) } struct op { - const char *name; + const char name[4]; void (*function) (void); }; @@ -145,7 +142,7 @@ static const struct op operators[] = { {"p", print_no_pop}, {"f", print_stack_no_pop}, {"o", set_output_base}, - {0, 0} + {"", 0} }; static void stack_machine(const char *argument) @@ -164,9 +161,9 @@ static void stack_machine(const char *argument) return; } - while (o->name != 0) { + while (o->name[0]) { if (strcmp(o->name, argument) == 0) { - (*(o->function)) (); + o->function(); return; } o++; @@ -185,7 +182,9 @@ static char *get_token(char **buffer) current = skip_whitespace(*buffer); if (*current != 0) { start = current; - while (!isspace(*current) && *current != 0) { current++; } + while (!isspace(*current) && *current != 0) { + current++; + } *buffer = current; } return start; @@ -220,7 +219,7 @@ int dc_main(int argc, char **argv) free(line); } } else { - if (*argv[1]=='-') + if (*argv[1] == '-') bb_show_usage(); while (argc >= 2) { stack_machine(argv[1]); |