From 6c149f4d9afaed9edb75c88b784ad900c1f40700 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 12 Apr 2017 21:31:32 +0200 Subject: [PATCH 14/14] ash: implement "exec -a ARGV0 CMD ARGV1..." function old new delta execcmd 71 112 +41 shellexec 221 224 +3 evalcommand 1158 1161 +3 localcmd 364 366 +2 unaliascmd 163 154 -9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/1 up/down: 49/-9) Total: 40 bytes Signed-off-by: Denys Vlasenko --- shell/ash.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/shell/ash.c b/shell/ash.c index 044f166..e170bec 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -3345,11 +3345,9 @@ unaliascmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) { int i; - while ((i = nextopt("a")) != '\0') { - if (i == 'a') { - rmaliases(); - return 0; - } + while (nextopt("a") != '\0') { + rmaliases(); + return 0; } for (i = 0; *argptr; argptr++) { if (unalias(*argptr)) { @@ -9354,7 +9352,14 @@ truecmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) static int FAST_FUNC execcmd(int argc UNUSED_PARAM, char **argv) { - if (argv[1]) { + optionarg = NULL; + while (nextopt("a:") != '\0') + /* nextopt() sets optionarg to "-a ARGV0" */; + + argv = argptr; + if (argv[0]) { + char *prog; + iflag = 0; /* exit on error */ mflag = 0; optschanged(); @@ -9370,7 +9375,10 @@ execcmd(int argc UNUSED_PARAM, char **argv) /*setsignal(SIGTSTP); - unnecessary because of mflag=0 */ /*setsignal(SIGTTOU); - unnecessary because of mflag=0 */ - shellexec(argv[1], argv + 1, pathval(), 0); + prog = argv[0]; + if (optionarg) + argv[0] = optionarg; + shellexec(prog, argv, pathval(), 0); /* NOTREACHED */ } return 0; -- 2.9.3