aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2020-12-02 21:35:32 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2020-12-02 21:39:57 +0100
commit0622416fece00507cf0ac53a2aa17ca3b1e565b2 (patch)
treee211f4b8aff274bad43e8a26d07b7ccfe063b286
parent2075aa93e007863c6b680994a7a0ba420181034f (diff)
downloadbusybox-w32-0622416fece00507cf0ac53a2aa17ca3b1e565b2.tar.gz
busybox-w32-0622416fece00507cf0ac53a2aa17ca3b1e565b2.tar.bz2
busybox-w32-0622416fece00507cf0ac53a2aa17ca3b1e565b2.zip
libbb: code shrink in exec_shell()
function old new delta exec_shell 129 120 -9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--libbb/run_shell.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/libbb/run_shell.c b/libbb/run_shell.c
index c2ff69651..9bec43b7c 100644
--- a/libbb/run_shell.c
+++ b/libbb/run_shell.c
@@ -59,7 +59,7 @@ void FAST_FUNC exec_shell(const char *shell, int loginshell, const char **additi
59 while (args && *args) 59 while (args && *args)
60 args++; 60 args++;
61 61
62 args = xmalloc(sizeof(char*) * (2 + (args - additional_args))); 62 args = xzalloc(sizeof(args[0]) * (2 + (args - additional_args)));
63 63
64 if (!shell || !shell[0]) 64 if (!shell || !shell[0])
65 shell = DEFAULT_SHELL; 65 shell = DEFAULT_SHELL;
@@ -67,12 +67,11 @@ void FAST_FUNC exec_shell(const char *shell, int loginshell, const char **additi
67 args[0] = bb_get_last_path_component_nostrip(shell); 67 args[0] = bb_get_last_path_component_nostrip(shell);
68 if (loginshell) 68 if (loginshell)
69 args[0] = xasprintf("-%s", args[0]); 69 args[0] = xasprintf("-%s", args[0]);
70 args[1] = NULL; 70 /*args[1] = NULL; - already is */
71 if (additional_args) { 71 if (additional_args) {
72 int cnt = 1; 72 int cnt = 0;
73 for (;;) 73 while (*additional_args)
74 if ((args[cnt++] = *additional_args++) == NULL) 74 args[++cnt] = *additional_args++;
75 break;
76 } 75 }
77 76
78#if ENABLE_SELINUX 77#if ENABLE_SELINUX
@@ -91,5 +90,8 @@ void FAST_FUNC exec_prog_or_SHELL(char **argv)
91 if (argv[0]) { 90 if (argv[0]) {
92 BB_EXECVP_or_die(argv); 91 BB_EXECVP_or_die(argv);
93 } 92 }
93 /* Why login=1? Both users (nsenter and unshare) do indeed exec
94 * a _login_ shell (with dash in argv[0])!
95 */
94 exec_shell(getenv("SHELL"), /*login:*/ 1, NULL); 96 exec_shell(getenv("SHELL"), /*login:*/ 1, NULL);
95} 97}