From a0ec4f500c7b8b2ac1c7e34c9a2ee7504c7f8914 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 20 May 2010 12:50:42 +0200 Subject: [PATCH] ash: eliminate 16 bytes in bss text data bss dec hexfilename 841423 441 7572 849436 cf61cbusybox_old 841430 441 7556 849427 cf613busybox_unstripped Signed-off-by: Denys Vlasenko --- shell/ash.c | 48 ++++++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/shell/ash.c b/shell/ash.c index 83886c610..7efd477d1 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -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; }