diff options
author | bug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2002-12-23 10:23:10 +0000 |
---|---|---|
committer | bug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2002-12-23 10:23:10 +0000 |
commit | 1e8ae8c6deaadff69599921f103162f1e225aac4 (patch) | |
tree | 4a8e0edeebcc6fdc3e0a0ced6fe14af0cbdc220d /shell | |
parent | c8daf83b597397816bc297118a0a03a6e3fa8eb2 (diff) | |
download | busybox-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.c | 32 |
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); |