dc: make "dc -1.23 ..." work
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 30 Dec 2009 17:37:08 +0000 (18:37 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 30 Dec 2009 17:37:08 +0000 (18:37 +0100)
function                                             old     new   delta
stack_machine                                         97     103      +6
dc_main                                              121     110     -11
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/2 up/down: 9/-58)             Total: -49 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/dc.c

index 3656cddc6ed9bff1566059f490a3e231f6dcdce2..7348ed349d140e615d1c0ce8cdc4b2a17dad0fa5 100644 (file)
@@ -191,24 +191,21 @@ static void stack_machine(const char *argument)
        double d;
        const struct op *o = operators;
 
-       if (argument == 0)
-               return;
-
        d = strtod(argument, &endPointer);
 
-       if (endPointer != argument) {
+       if (endPointer != argument && *endPointer == '\0') {
                push(d);
                return;
        }
 
-       while (o->name[0]) {
+       while (o->function) {
                if (strcmp(o->name, argument) == 0) {
                        o->function();
                        return;
                }
                o++;
        }
-       bb_error_msg_and_die("%s: syntax error", argument);
+       bb_error_msg_and_die("syntax error at '%s'", argument);
 }
 
 /* return pointer to next token in buffer and set *buffer to one char
@@ -239,15 +236,17 @@ int dc_main(int argc UNUSED_PARAM, char **argv)
                        cursor = line;
                        while (1) {
                                token = get_token(&cursor);
-                               if (!token) break;
+                               if (!token)
+                                       break;
                                *cursor++ = '\0';
                                stack_machine(token);
                        }
                        free(line);
                }
        } else {
-               if (argv[0][0] == '-')
-                       bb_show_usage();
+               // why? it breaks "dc -2 2 * p"
+               //if (argv[0][0] == '-')
+               //      bb_show_usage();
                do {
                        stack_machine(*argv);
                } while (*++argv);