summaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorEric Andersen2000-11-17 18:07:30 +0000
committerEric Andersen2000-11-17 18:07:30 +0000
commit50b3113dc2d7056d34e053826cb2d23327c99803 (patch)
treec0c5859b8b8182c0c11e2662cdead1ca10fc38d8 /shell
parent337ec1bb321830df27af594f50995ef1de47cd55 (diff)
downloadbusybox-50b3113dc2d7056d34e053826cb2d23327c99803.zip
busybox-50b3113dc2d7056d34e053826cb2d23327c99803.tar.gz
Add in a new FEATURE (off by default) BB_FEATURE_SH_BUILTINS_ALWAYS_WIN.
Make the sh default to using external commands when a path is provided.
Diffstat (limited to 'shell')
-rw-r--r--shell/lash.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/shell/lash.c b/shell/lash.c
index 7a8810a..d6ac1fc 100644
--- a/shell/lash.c
+++ b/shell/lash.c
@@ -1216,7 +1216,24 @@ static int runCommand(struct job *newJob, struct jobSet *jobList, int inBg, int
#ifdef BB_FEATURE_SH_STANDALONE_SHELL
/* Check if the command matches any busybox internal commands here */
while (a->name != 0) {
- if (strcmp(get_last_path_component(newJob->progs[i].argv[0]), a->name) == 0) {
+#ifdef BB_FEATURE_SH_BUILTINS_ALWAYS_WIN
+ if (strcmp(get_last_path_component(newJob->progs[i].argv[0]),
+ a->name) == 0)
+#else
+ /* Check if the command matches any busybox internal
+ * commands ("applets") here. Following discussions from
+ * November 2000 on busybox@opensource.lineo.com, don't use
+ * get_last_path_component(). This way explicit (with
+ * slashes) filenames will never be interpreted as an
+ * applet, just like with builtins. This way the user can
+ * override an applet with an explicit filename reference.
+ * The only downside to this change is that an explicit
+ * /bin/foo invocation fill fork and exec /bin/foo, even if
+ * /bin/foo is a symlink to busybox.
+ */
+ if (strcmp(newJob->progs[i].argv[0], a->name) == 0)
+#endif
+ {
int argc_l;
char** argv=newJob->progs[i].argv;
for(argc_l=0;*argv!=NULL; argv++, argc_l++);