aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorbug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277>2002-12-23 10:23:10 +0000
committerbug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277>2002-12-23 10:23:10 +0000
commit1e8ae8c6deaadff69599921f103162f1e225aac4 (patch)
tree4a8e0edeebcc6fdc3e0a0ced6fe14af0cbdc220d /shell
parentc8daf83b597397816bc297118a0a03a6e3fa8eb2 (diff)
downloadbusybox-w32-1e8ae8c6deaadff69599921f103162f1e225aac4.tar.gz
busybox-w32-1e8ae8c6deaadff69599921f103162f1e225aac4.tar.bz2
busybox-w32-1e8ae8c6deaadff69599921f103162f1e225aac4.zip
Fix STANDALONE_SHELL and ALWAYS_WIN options, last_path_73 by Vladimir N. Oleynik
git-svn-id: svn://busybox.net/trunk/busybox@6241 69ca8d6d-28ef-0310-b511-8ec308f3f277
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);