hush: shrink code in builtin_eval

function                                             old     new   delta
builtin_eval                                         126     119      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2018-07-15 18:03:56 +02:00
parent 8717b14f37
commit b0441a7189

View File

@ -9806,18 +9806,23 @@ static int FAST_FUNC builtin_pwd(char **argv UNUSED_PARAM)
static int FAST_FUNC builtin_eval(char **argv) static int FAST_FUNC builtin_eval(char **argv)
{ {
int rcode = EXIT_SUCCESS;
argv = skip_dash_dash(argv); argv = skip_dash_dash(argv);
if (argv[0]) {
char *str = NULL;
if (argv[1]) { 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(argv[0]);
} else {
/* "The eval utility shall construct a command by /* "The eval utility shall construct a command by
* concatenating arguments together, separating * concatenating arguments together, separating
* each with a <space> character." * each with a <space> character."
*/ */
char *p; char *str, *p;
unsigned len = 0; unsigned len = 0;
char **pp = argv; char **pp = argv;
do do
@ -9825,22 +9830,17 @@ static int FAST_FUNC builtin_eval(char **argv)
while (*++pp); while (*++pp);
str = p = xmalloc(len); str = p = xmalloc(len);
pp = argv; pp = argv;
do { for (;;) {
p = stpcpy(p, *pp); p = stpcpy(p, *pp);
pp++;
if (!*pp)
break;
*p++ = ' '; *p++ = ' ';
} while (*++pp);
p[-1] = '\0';
} }
parse_and_run_string(str);
/* bash:
* eval "echo Hi; done" ("done" is syntax error):
* "echo Hi" will not execute too.
*/
parse_and_run_string(str ? str : argv[0]);
free(str); free(str);
rcode = G.last_exitcode;
} }
return rcode; return G.last_exitcode;
} }
static int FAST_FUNC builtin_exec(char **argv) static int FAST_FUNC builtin_exec(char **argv)