dc: use common_bufsiz1 for evaluation stack
authorDenis Vlasenko <vda.linux@googlemail.com>
Sat, 24 Mar 2007 14:06:51 +0000 (14:06 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sat, 24 Mar 2007 14:06:51 +0000 (14:06 -0000)
msh: fix "underscore bug" (a_b=1111 didn't work)
dnsd: openlog(), so that applet's name is logged

miscutils/dc.c
networking/dnsd.c
shell/msh.c

index 2121f7669a581e137e8b74dddb7d5840be169b47..8c9d77fc36dcf098d0214bae05a63c63dda1c07b 100644 (file)
@@ -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]);
index 2cecf64912ea63e855391f9c1a0ce98657c12531..c9c7b3a7c4f5ce664e8134608fb2758f07537a74 100644 (file)
@@ -17,6 +17,7 @@
  * the first porting of oao' scdns to busybox also.
  */
 
+#include <syslog.h>
 #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;
        }
 
index 41f4cc60d4bea2b01aa3fd0c80745b15db362b83..d9dd3efb21bdc7eb0e1c8cdecfc81a0f604ccdd5 100644 (file)
@@ -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;
                }