diff options
Diffstat (limited to 'shell/ash.c')
-rw-r--r-- | shell/ash.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/shell/ash.c b/shell/ash.c index 0872e681a..cc61401d1 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -8747,6 +8747,24 @@ evalcommand(union node *cmd, int flags) | |||
8747 | /* Execute the command. */ | 8747 | /* Execute the command. */ |
8748 | switch (cmdentry.cmdtype) { | 8748 | switch (cmdentry.cmdtype) { |
8749 | default: | 8749 | default: |
8750 | |||
8751 | #if ENABLE_FEATURE_SH_NOFORK | ||
8752 | { | ||
8753 | /* TODO: don't rerun find_applet_by_name, find_command | ||
8754 | * already did it. Make it save applet_no somewhere */ | ||
8755 | int applet_no = find_applet_by_name(argv[0]); | ||
8756 | if (applet_no >= 0 && APPLET_IS_NOFORK(applet_no)) { | ||
8757 | struct nofork_save_area nofork_save; | ||
8758 | |||
8759 | listsetvar(varlist.list, VEXPORT|VSTACK); | ||
8760 | save_nofork_data(&nofork_save); | ||
8761 | /* run <applet>_main(), then restore nofork_save_area */ | ||
8762 | exitstatus = run_nofork_applet_prime(&nofork_save, applet_no, argv) & 0xff; | ||
8763 | break; | ||
8764 | } | ||
8765 | } | ||
8766 | #endif | ||
8767 | |||
8750 | /* Fork off a child process if necessary. */ | 8768 | /* Fork off a child process if necessary. */ |
8751 | if (!(flags & EV_EXIT) || trap[0]) { | 8769 | if (!(flags & EV_EXIT) || trap[0]) { |
8752 | INT_OFF; | 8770 | INT_OFF; |