70 lines
2.1 KiB
Diff
70 lines
2.1 KiB
Diff
|
From 6c149f4d9afaed9edb75c88b784ad900c1f40700 Mon Sep 17 00:00:00 2001
|
||
|
From: Denys Vlasenko <vda.linux@googlemail.com>
|
||
|
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 <vda.linux@googlemail.com>
|
||
|
---
|
||
|
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
|
||
|
|