aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/ash.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 34d5af446..0d188e1e6 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -7764,6 +7764,15 @@ tryexec(IF_FEATURE_SH_STANDALONE(int applet_no,) char *cmd, char **argv, char **
7764 } 7764 }
7765} 7765}
7766 7766
7767#if ENABLE_PLATFORM_MINGW32 && ENABLE_FEATURE_SH_STANDALONE
7768/* check if command and executable are both busybox */
7769static int busybox_cmd_and_exe(const char *name)
7770{
7771 return strcmp(name, "busybox") == 0 &&
7772 strcmp(bb_basename(bb_busybox_exec_path), "busybox.exe") == 0;
7773}
7774#endif
7775
7767/* 7776/*
7768 * Exec a program. Never returns. If you change this routine, you may 7777 * Exec a program. Never returns. If you change this routine, you may
7769 * have to change the find_command routine as well. 7778 * have to change the find_command routine as well.
@@ -7794,6 +7803,10 @@ shellexec(char **argv, const char *path, int idx)
7794 goto try_PATH; 7803 goto try_PATH;
7795 } 7804 }
7796 e = errno; 7805 e = errno;
7806#if ENABLE_PLATFORM_MINGW32 && ENABLE_FEATURE_SH_STANDALONE
7807 } else if (busybox_cmd_and_exe(argv[0])) {
7808 tryexec(-1, bb_busybox_exec_path, argv, envp);
7809#endif
7797 } else { 7810 } else {
7798 try_PATH: 7811 try_PATH:
7799 e = ENOENT; 7812 e = ENOENT;
@@ -12769,6 +12782,14 @@ find_command(char *name, struct cmdentry *entry, int act, const char *path)
12769 return; 12782 return;
12770 } 12783 }
12771 12784
12785#if ENABLE_PLATFORM_MINGW32 && ENABLE_FEATURE_SH_STANDALONE
12786 if (busybox_cmd_and_exe(name)) {
12787 entry->u.index = -1;
12788 entry->cmdtype = CMDNORMAL;
12789 return;
12790 }
12791#endif
12792
12772/* #if ENABLE_FEATURE_SH_STANDALONE... moved after builtin check */ 12793/* #if ENABLE_FEATURE_SH_STANDALONE... moved after builtin check */
12773 12794
12774 updatetbl = (path == pathval()); 12795 updatetbl = (path == pathval());