diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2002-12-23 10:23:10 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2002-12-23 10:23:10 +0000 |
commit | c00c56e7c8d2446c2c91445afbaad77c3ee72175 (patch) | |
tree | 4a8e0edeebcc6fdc3e0a0ced6fe14af0cbdc220d /shell | |
parent | 0a65e190f4dafd5850fb3e86df30e88b198bab1e (diff) | |
download | busybox-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.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); |