From 5b27fbe990d868441452c474e5b14e94f8bc8335 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sat, 24 Mar 2007 14:06:51 +0000 Subject: 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 --- miscutils/dc.c | 35 +++++++++++++++++------------------ networking/dnsd.c | 3 ++- shell/msh.c | 17 ++++++++--------- 3 files changed, 27 insertions(+), 28 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 -#include -#include -#include -#include #include /* 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]); diff --git a/networking/dnsd.c b/networking/dnsd.c index 2cecf6491..c9c7b3a7c 100644 --- a/networking/dnsd.c +++ b/networking/dnsd.c @@ -17,6 +17,7 @@ * the first porting of oao' scdns to busybox also. */ +#include #include "busybox.h" //#define DEBUG 1 @@ -114,7 +115,6 @@ static void undot(uint8_t * rip) * Presently the dot is copied into name without * converting to a length/string substring for that label. */ - static int getfileentry(FILE * fp, struct dns_entry *s) { unsigned int a,b,c,d; @@ -359,6 +359,7 @@ int dnsd_main(int argc, char **argv) #else xdaemon(1, 0); #endif + openlog(applet_name, LOG_PID, LOG_DAEMON); logmode = LOGMODE_SYSLOG; } diff --git a/shell/msh.c b/shell/msh.c index 41f4cc60d..d9dd3efb2 100644 --- a/shell/msh.c +++ b/shell/msh.c @@ -1191,23 +1191,22 @@ static int isassign(const char *s) unsigned char c; DBGPRINTF7(("ISASSIGN: enter, s=%s\n", s)); - /* no isalpha() - we shouldn't use locale */ c = *s; - if (c != '_' - && (unsigned)((c|0x20) - 'a') > 25 /* not letter */ - ) { + /* no isalpha() - we shouldn't use locale */ + /* c | 0x20 - lowercase (Latin) letters */ + if (c != '_' && (unsigned)((c|0x20) - 'a') > 25) + /* not letter */ return 0; - } + while (1) { c = *++s; - if (c == '\0') - return 0; if (c == '=') return 1; - c |= 0x20; /* lowercase letters, doesn't affect numbers */ + if (c == '\0') + return 0; if (c != '_' && (unsigned)(c - '0') > 9 /* not number */ - && (unsigned)(c - 'a') > 25 /* not letter */ + && (unsigned)((c|0x20) - 'a') > 25 /* not letter */ ) { return 0; } -- cgit v1.2.3