diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-07-15 18:03:56 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-07-15 18:03:56 +0200 |
commit | b0441a7189c874808dcfc36567d3e878c6ec7ba3 (patch) | |
tree | 9a28c747b854e5075f3eed1f661c1bf6937a02a3 /shell/hush.c | |
parent | 8717b14f376e38998512c022b3d2b1af6e877e5e (diff) |
hush: shrink code in builtin_eval
function old new delta
builtin_eval 126 119 -7
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell/hush.c')
-rw-r--r-- | shell/hush.c | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/shell/hush.c b/shell/hush.c index 1f83267be..9d3f06db0 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -9806,41 +9806,41 @@ static int FAST_FUNC builtin_pwd(char **argv UNUSED_PARAM) static int FAST_FUNC builtin_eval(char **argv) { - int rcode = EXIT_SUCCESS; - argv = skip_dash_dash(argv); - if (argv[0]) { - char *str = NULL; - if (argv[1]) { - /* "The eval utility shall construct a command by - * concatenating arguments together, separating - * each with a <space> character." - */ - char *p; - unsigned len = 0; - char **pp = argv; - do - len += strlen(*pp) + 1; - while (*++pp); - str = p = xmalloc(len); - pp = argv; - do { - p = stpcpy(p, *pp); - *p++ = ' '; - } while (*++pp); - p[-1] = '\0'; - } + if (!argv[0]) + return EXIT_SUCCESS; + if (!argv[1]) { /* bash: * eval "echo Hi; done" ("done" is syntax error): * "echo Hi" will not execute too. */ - parse_and_run_string(str ? str : argv[0]); + parse_and_run_string(argv[0]); + } else { + /* "The eval utility shall construct a command by + * concatenating arguments together, separating + * each with a <space> character." + */ + char *str, *p; + unsigned len = 0; + char **pp = argv; + do + len += strlen(*pp) + 1; + while (*++pp); + str = p = xmalloc(len); + pp = argv; + for (;;) { + p = stpcpy(p, *pp); + pp++; + if (!*pp) + break; + *p++ = ' '; + } + parse_and_run_string(str); free(str); - rcode = G.last_exitcode; } - return rcode; + return G.last_exitcode; } static int FAST_FUNC builtin_exec(char **argv) |