summaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2002-12-23 10:23:10 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2002-12-23 10:23:10 +0000
commitc00c56e7c8d2446c2c91445afbaad77c3ee72175 (patch)
tree4a8e0edeebcc6fdc3e0a0ced6fe14af0cbdc220d /shell
parent0a65e190f4dafd5850fb3e86df30e88b198bab1e (diff)
downloadbusybox-w32-c00c56e7c8d2446c2c91445afbaad77c3ee72175.tar.gz
busybox-w32-c00c56e7c8d2446c2c91445afbaad77c3ee72175.tar.bz2
busybox-w32-c00c56e7c8d2446c2c91445afbaad77c3ee72175.zip
Fix STANDALONE_SHELL and ALWAYS_WIN options, last_path_73 by Vladimir N. Oleynik
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 696d554a9..97a28b1f5 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -3280,20 +3280,34 @@ static void tryexec(char *cmd, char **argv, char **envp)
3280 int repeated = 0; 3280 int repeated = 0;
3281 3281
3282#ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL 3282#ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL
3283 int flg_bb = 0;
3283 char *name = cmd; 3284 char *name = cmd;
3284 char **argv_l = argv;
3285 int argc_l;
3286 3285
3287#ifdef CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN 3286#ifdef CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN
3288 name = get_last_path_component(name); 3287 name = get_last_path_component(name);
3288 if(find_applet_by_name(name) != NULL)
3289 flg_bb = 1;
3290#else
3291 if(strchr(name, '/') == NULL && find_applet_by_name(name) != NULL) {
3292 flg_bb = 1;
3293 }
3289#endif 3294#endif
3290 argv_l = envp; 3295 if(flg_bb) {
3291 for (argc_l = 0; *argv_l != NULL; argv_l++, argc_l++) 3296 char **ap;
3292 putenv(*argv_l); 3297 char **new;
3293 argv_l = argv; 3298
3294 for (argc_l = 0; *argv_l != NULL; argv_l++, argc_l++) 3299 *argv = name;
3295 optind = 1; 3300 if(strcmp(name, "busybox")) {
3296 run_applet_by_name(name, argc_l, argv); 3301 for (ap = argv; *ap; ap++);
3302 ap = new = xmalloc((ap - argv + 2) * sizeof(char *));
3303 *ap++ = cmd = "/bin/busybox";
3304 while ((*ap++ = *argv++));
3305 argv = new;
3306 repeated++;
3307 } else {
3308 cmd = "/bin/busybox";
3309 }
3310 }
3297#endif 3311#endif
3298 repeat: 3312 repeat:
3299 execve(cmd, argv, envp); 3313 execve(cmd, argv, envp);