aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libbb.h2
-rw-r--r--libbb/appletlib.c10
-rw-r--r--libbb/vfork_daemon_rexec.c2
-rw-r--r--shell/ash.c2
-rw-r--r--shell/hush.c2
5 files changed, 11 insertions, 7 deletions
diff --git a/include/libbb.h b/include/libbb.h
index 1c9de3af0..0317c7d6a 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -1117,7 +1117,7 @@ int spawn_and_wait(char **argv) FAST_FUNC;
1117int run_nofork_applet(int applet_no, char **argv) FAST_FUNC; 1117int run_nofork_applet(int applet_no, char **argv) FAST_FUNC;
1118#ifndef BUILD_INDIVIDUAL 1118#ifndef BUILD_INDIVIDUAL
1119extern int find_applet_by_name(const char *name) FAST_FUNC; 1119extern int find_applet_by_name(const char *name) FAST_FUNC;
1120extern void run_applet_no_and_exit(int a, char **argv) NORETURN FAST_FUNC; 1120extern void run_applet_no_and_exit(int a, const char *name, char **argv) NORETURN FAST_FUNC;
1121#endif 1121#endif
1122 1122
1123/* Helpers for daemonization. 1123/* Helpers for daemonization.
diff --git a/libbb/appletlib.c b/libbb/appletlib.c
index 2dea2b43a..df6584978 100644
--- a/libbb/appletlib.c
+++ b/libbb/appletlib.c
@@ -877,13 +877,17 @@ static int busybox_main(char **argv)
877# endif 877# endif
878 878
879# if NUM_APPLETS > 0 879# if NUM_APPLETS > 0
880void FAST_FUNC run_applet_no_and_exit(int applet_no, char **argv) 880void FAST_FUNC run_applet_no_and_exit(int applet_no, const char *name, char **argv)
881{ 881{
882 int argc = string_array_len(argv); 882 int argc = string_array_len(argv);
883 883
884 /* Reinit some shared global data */ 884 /* Reinit some shared global data */
885 xfunc_error_retval = EXIT_FAILURE; 885 xfunc_error_retval = EXIT_FAILURE;
886 applet_name = bb_get_last_path_component_nostrip(argv[0]); 886 /*
887 * We do not use argv[0]: do not want to repeat massaging of
888 * "-/sbin/halt" -> "halt", for example.
889 */
890 applet_name = name;
887 891
888 /* Special case. POSIX says "test --help" 892 /* Special case. POSIX says "test --help"
889 * should be no different from e.g. "test --foo". 893 * should be no different from e.g. "test --foo".
@@ -927,7 +931,7 @@ static NORETURN void run_applet_and_exit(const char *name, char **argv)
927 { 931 {
928 int applet = find_applet_by_name(name); 932 int applet = find_applet_by_name(name);
929 if (applet >= 0) 933 if (applet >= 0)
930 run_applet_no_and_exit(applet, argv); 934 run_applet_no_and_exit(applet, name, argv);
931 } 935 }
932# endif 936# endif
933 937
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c
index 2695f99ee..576534ee5 100644
--- a/libbb/vfork_daemon_rexec.c
+++ b/libbb/vfork_daemon_rexec.c
@@ -180,7 +180,7 @@ int FAST_FUNC spawn_and_wait(char **argv)
180 * as of yet (and that should probably always stay true). 180 * as of yet (and that should probably always stay true).
181 */ 181 */
182 /* xfunc_error_retval and applet_name are init by: */ 182 /* xfunc_error_retval and applet_name are init by: */
183 run_applet_no_and_exit(a, argv); 183 run_applet_no_and_exit(a, argv[0], argv);
184 } 184 }
185# endif 185# endif
186 } 186 }
diff --git a/shell/ash.c b/shell/ash.c
index b7635a823..8c2098dd9 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -7717,7 +7717,7 @@ tryexec(IF_FEATURE_SH_STANDALONE(int applet_no,) char *cmd, char **argv, char **
7717 clearenv(); 7717 clearenv();
7718 while (*envp) 7718 while (*envp)
7719 putenv(*envp++); 7719 putenv(*envp++);
7720 run_applet_no_and_exit(applet_no, argv); 7720 run_applet_no_and_exit(applet_no, cmd, argv);
7721 } 7721 }
7722 /* re-exec ourselves with the new arguments */ 7722 /* re-exec ourselves with the new arguments */
7723 execve(bb_busybox_exec_path, argv, envp); 7723 execve(bb_busybox_exec_path, argv, envp);
diff --git a/shell/hush.c b/shell/hush.c
index 4ba6b3fdd..cf6d8cd9f 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -7063,7 +7063,7 @@ static NOINLINE void pseudo_exec_argv(nommu_save_t *nommu_save,
7063 /* Do not leak open fds from opened script files etc */ 7063 /* Do not leak open fds from opened script files etc */
7064 close_all_FILE_list(); 7064 close_all_FILE_list();
7065 debug_printf_exec("running applet '%s'\n", argv[0]); 7065 debug_printf_exec("running applet '%s'\n", argv[0]);
7066 run_applet_no_and_exit(a, argv); 7066 run_applet_no_and_exit(a, argv[0], argv);
7067 } 7067 }
7068# endif 7068# endif
7069 /* Re-exec ourselves */ 7069 /* Re-exec ourselves */