aboutsummaryrefslogtreecommitdiff
path: root/shell/ash.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-04-12 20:07:53 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-04-12 20:07:53 +0000
commit9bc80d7062a01aa310be0729c095ba6b652c4735 (patch)
tree9ee8208bc63a09ce1fc9031ffc7123b06ce77b9c /shell/ash.c
parent4a9ca13fe7587314aa55a800c86e20fc21d8f2b1 (diff)
downloadbusybox-w32-9bc80d7062a01aa310be0729c095ba6b652c4735.tar.gz
busybox-w32-9bc80d7062a01aa310be0729c095ba6b652c4735.tar.bz2
busybox-w32-9bc80d7062a01aa310be0729c095ba6b652c4735.zip
ash: add FEATURE_SH_NOFORK support
Diffstat (limited to 'shell/ash.c')
-rw-r--r--shell/ash.c18
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;