diff options
-rw-r--r-- | include/busybox.h | 13 | ||||
-rw-r--r-- | shell/hush.c | 26 |
2 files changed, 20 insertions, 19 deletions
diff --git a/include/busybox.h b/include/busybox.h index 48ce856ea..48fc0b4c8 100644 --- a/include/busybox.h +++ b/include/busybox.h @@ -35,18 +35,21 @@ extern const uint16_t applet_nameofs[]; extern const uint8_t applet_install_loc[]; #if ENABLE_FEATURE_SUID || ENABLE_FEATURE_PREFER_APPLETS -#define APPLET_NAME(i) (applet_names + (applet_nameofs[i] & 0x0fff)) +# define APPLET_NAME(i) (applet_names + (applet_nameofs[i] & 0x0fff)) #else -#define APPLET_NAME(i) (applet_names + applet_nameofs[i]) +# define APPLET_NAME(i) (applet_names + applet_nameofs[i]) #endif #if ENABLE_FEATURE_PREFER_APPLETS -#define APPLET_IS_NOFORK(i) (applet_nameofs[i] & (1 << 12)) -#define APPLET_IS_NOEXEC(i) (applet_nameofs[i] & (1 << 13)) +# define APPLET_IS_NOFORK(i) (applet_nameofs[i] & (1 << 12)) +# define APPLET_IS_NOEXEC(i) (applet_nameofs[i] & (1 << 13)) +#else +# define APPLET_IS_NOFORK(i) 0 +# define APPLET_IS_NOEXEC(i) 0 #endif #if ENABLE_FEATURE_SUID -#define APPLET_SUID(i) ((applet_nameofs[i] >> 14) & 0x3) +# define APPLET_SUID(i) ((applet_nameofs[i] >> 14) & 0x3) #endif #if ENABLE_FEATURE_INSTALLER diff --git a/shell/hush.c b/shell/hush.c index 8a467be80..7dacfa0b1 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -4328,9 +4328,7 @@ static NOINLINE int run_pipe(struct pipe *pi) } #endif } -#if ENABLE_FEATURE_SH_STANDALONE clean_up_and_ret: -#endif restore_redirects(squirrel); unset_vars(new_env); add_vars(old_vars); @@ -4342,20 +4340,20 @@ static NOINLINE int run_pipe(struct pipe *pi) return rcode; } -#if ENABLE_FEATURE_SH_STANDALONE - i = find_applet_by_name(argv_expanded[0]); - if (i >= 0 && APPLET_IS_NOFORK(i)) { - rcode = setup_redirects(command, squirrel); - if (rcode == 0) { - new_env = expand_assignments(argv, command->assignment_cnt); - old_vars = set_vars_and_save_old(new_env); - debug_printf_exec(": run_nofork_applet '%s' '%s'...\n", - argv_expanded[0], argv_expanded[1]); - rcode = run_nofork_applet(i, argv_expanded); + if (ENABLE_FEATURE_SH_STANDALONE) { + int n = find_applet_by_name(argv_expanded[0]); + if (n >= 0 && APPLET_IS_NOFORK(n)) { + rcode = setup_redirects(command, squirrel); + if (rcode == 0) { + new_env = expand_assignments(argv, command->assignment_cnt); + old_vars = set_vars_and_save_old(new_env); + debug_printf_exec(": run_nofork_applet '%s' '%s'...\n", + argv_expanded[0], argv_expanded[1]); + rcode = run_nofork_applet(n, argv_expanded); + } + goto clean_up_and_ret; } - goto clean_up_and_ret; } -#endif /* It is neither builtin nor applet. We must fork. */ } |