ash: eliminate 16 bytes in bss
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 20 May 2010 10:50:42 +0000 (12:50 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 20 May 2010 10:50:42 +0000 (12:50 +0200)
   text   data    bss    dec    hexfilename
 841423    441   7572 849436  cf61cbusybox_old
 841430    441   7556 849427  cf613busybox_unstripped

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

index 83886c6..7efd477 100644 (file)
@@ -7547,8 +7547,10 @@ changepath(const char *new)
                if (*old != *new) {
                        firstchange = idx;
                        if ((*old == '\0' && *new == ':')
-                        || (*old == ':' && *new == '\0'))
+                        || (*old == ':' && *new == '\0')
+                       ) {
                                firstchange++;
+                       }
                        old = new;      /* ignore subsequent differences */
                }
                if (*new == '\0')
@@ -7557,7 +7559,8 @@ changepath(const char *new)
                        idx_bltin = idx;
                if (*new == ':')
                        idx++;
-               new++, old++;
+               new++;
+               old++;
        }
        if (builtinloc < 0 && idx_bltin >= 0)
                builtinloc = idx_bltin;             /* zap builtins */
@@ -7633,23 +7636,6 @@ static const char *const tokname_array[] = {
        "\1}",
 };
 
-static const char *
-tokname(int tok)
-{
-       static char buf[16];
-
-//try this:
-//if (tok < TSEMI) return tokname_array[tok] + 1;
-//sprintf(buf, "\"%s\"", tokname_array[tok] + 1);
-//return buf;
-
-       if (tok >= TSEMI)
-               buf[0] = '"';
-       sprintf(buf + (tok >= TSEMI), "%s%c",
-                       tokname_array[tok] + 1, (tok >= TSEMI ? '"' : 0));
-       return buf;
-}
-
 /* Wrapper around strcmp for qsort/bsearch/... */
 static int
 pstrcmp(const void *a, const void *b)
@@ -10280,7 +10266,16 @@ static struct nodelist *backquotelist;
 static union node *redirnode;
 static struct heredoc *heredoc;
 
-/*
+static const char *
+tokname(char *buf, int tok)
+{
+       if (tok < TSEMI)
+               return tokname_array[tok] + 1;
+       sprintf(buf, "\"%s\"", tokname_array[tok] + 1);
+       return buf;
+}
+
+/* raise_error_unexpected_syntax:
  * Called when an unexpected token is read during the parse.  The argument
  * is the token that is expected, or -1 if more than one type of token can
  * occur at this point.
@@ -10290,11 +10285,12 @@ static void
 raise_error_unexpected_syntax(int token)
 {
        char msg[64];
+       char buf[16];
        int l;
 
-       l = sprintf(msg, "unexpected %s", tokname(lasttoken));
+       l = sprintf(msg, "unexpected %s", tokname(buf, lasttoken));
        if (token >= 0)
-               sprintf(msg + l, " (expecting %s)", tokname(token));
+               sprintf(msg + l, " (expecting %s)", tokname(buf, token));
        raise_error_syntax(msg);
        /* NOTREACHED */
 }
@@ -10682,7 +10678,7 @@ parse_command(void)
                n1->nbinary.ch1 = list(0);
                got = readtoken();
                if (got != TDO) {
-                       TRACE(("expecting DO got %s %s\n", tokname(got),
+                       TRACE(("expecting DO got '%s' %s\n", tokname_array[got] + 1,
                                        got == TWORD ? wordtext : ""));
                        raise_error_unexpected_syntax(TDO);
                }
@@ -11766,7 +11762,7 @@ readtoken(void)
                pp = findkwd(wordtext);
                if (pp) {
                        lasttoken = t = pp - tokname_array;
-                       TRACE(("keyword %s recognized\n", tokname(t)));
+                       TRACE(("keyword '%s' recognized\n", tokname_array[t] + 1));
                        goto out;
                }
        }
@@ -11787,9 +11783,9 @@ readtoken(void)
        checkkwd = 0;
 #if DEBUG
        if (!alreadyseen)
-               TRACE(("token %s %s\n", tokname(t), t == TWORD ? wordtext : ""));
+               TRACE(("token '%s' %s\n", tokname_array[t] + 1, t == TWORD ? wordtext : ""));
        else
-               TRACE(("reread token %s %s\n", tokname(t), t == TWORD ? wordtext : ""));
+               TRACE(("reread token '%s' %s\n", tokname_array[t] + 1, t == TWORD ? wordtext : ""));
 #endif
        return t;
 }