- int (*sigint)(), (*sigquit)();
- union wait stat;
- register int t;
- char *Shell;
-
- if ((Shell = value("SHELL")) == NOSTR)
- Shell = SHELL;
- sigint = signal(SIGINT, SIG_IGN);
- sigquit = signal(SIGQUIT, SIG_IGN);
- t = vfork();
- if (t == 0) {
- if (sigint != SIG_IGN)
- signal(SIGINT, SIG_DFL);
- if (sigquit != SIG_IGN)
- signal(SIGQUIT, SIG_DFL);
- execl(Shell, Shell, (char *)0);
- perror(Shell);
- _exit(1);
- }
- while (wait(&stat) != t)
- ;
- if (t == -1)
- perror("fork");
- signal(SIGINT, sigint);
- signal(SIGQUIT, sigquit);
+ sig_t sigint = signal(SIGINT, SIG_IGN);
+ char *shell;
+
+ if ((shell = value("SHELL")) == NOSTR)
+ shell = _PATH_CSHELL;
+ (void) run_command(shell, 0, -1, -1, NOSTR, NOSTR, NOSTR);
+ (void) signal(SIGINT, sigint);