hush: mark SIGHUP TODOs better; don't disable SIGHUP for now,

small tweaks to comments
This commit is contained in:
Denis Vlasenko 2009-04-06 10:21:42 +00:00
parent a0e65120b5
commit d3f973eab2

View File

@ -894,7 +894,8 @@ static int check_and_run_traps(int sig)
//TODO //TODO
// case SIGHUP: ... // case SIGHUP: ...
// break; // break;
default: /* SIGTERM, SIGQUIT, SIGTTIN, SIGTTOU, SIGTSTP */ default: /* ignored: */
/* SIGTERM, SIGQUIT, SIGTTIN, SIGTTOU, SIGTSTP */
break; break;
} }
} }
@ -4940,7 +4941,7 @@ static void block_signals(int second_time)
mask = 0 mask = 0
| (1 << SIGQUIT) | (1 << SIGQUIT)
| (1 << SIGTERM) | (1 << SIGTERM)
| (1 << SIGHUP) //TODO | (1 << SIGHUP)
#if ENABLE_HUSH_JOB #if ENABLE_HUSH_JOB
| (1 << SIGTTIN) | (1 << SIGTTOU) | (1 << SIGTSTP) | (1 << SIGTTIN) | (1 << SIGTTOU) | (1 << SIGTSTP)
#endif #endif
@ -4983,7 +4984,7 @@ static void maybe_set_to_sigexit(int sig)
signal(sig, handler); signal(sig, handler);
} }
} }
/* Set handlers to restore tty pgrm and exit */ /* Set handlers to restore tty pgrp and exit */
static void set_fatal_handlers(void) static void set_fatal_handlers(void)
{ {
/* We _must_ restore tty pgrp on fatal signals */ /* We _must_ restore tty pgrp on fatal signals */
@ -4998,8 +4999,9 @@ static void set_fatal_handlers(void)
/* bash 3.2 seems to handle these just like 'fatal' ones */ /* bash 3.2 seems to handle these just like 'fatal' ones */
maybe_set_to_sigexit(SIGPIPE); maybe_set_to_sigexit(SIGPIPE);
maybe_set_to_sigexit(SIGALRM); maybe_set_to_sigexit(SIGALRM);
//TODO: disable and move down when proper SIGHUP handling is added
maybe_set_to_sigexit(SIGHUP ); maybe_set_to_sigexit(SIGHUP );
/* if we are interactive, SIGTERM and SIGINT are masked. /* if we are interactive, [SIGHUP,] SIGTERM and SIGINT are masked.
* if we aren't interactive... but in this case * if we aren't interactive... but in this case
* we never want to restore pgrp on exit, and this fn is not called */ * we never want to restore pgrp on exit, and this fn is not called */
/*maybe_set_to_sigexit(SIGTERM);*/ /*maybe_set_to_sigexit(SIGTERM);*/
@ -5075,8 +5077,8 @@ int hush_main(int argc, char **argv)
#endif #endif
/* Shell is non-interactive at first. We need to call /* Shell is non-interactive at first. We need to call
* block_signals(0) if we are going to execute "sh script", * block_signals(0) if we are going to execute "sh <script>",
* "sh -c cmds" or login shell's /etc/profile and friends. * "sh -c <cmds>" or login shell's /etc/profile and friends.
* If we later decide that we are interactive, we run block_signals(0) * If we later decide that we are interactive, we run block_signals(0)
* (or re-run block_signals(1) if we ran block_signals(0) before) * (or re-run block_signals(1) if we ran block_signals(0) before)
* in order to intercept (more) signals. * in order to intercept (more) signals.
@ -5125,11 +5127,11 @@ int hush_main(int argc, char **argv)
case '?': case '?':
G.last_return_code = xatoi_u(optarg); G.last_return_code = xatoi_u(optarg);
break; break;
#if ENABLE_HUSH_LOOPS # if ENABLE_HUSH_LOOPS
case 'D': case 'D':
G.depth_of_loop = xatoi_u(optarg); G.depth_of_loop = xatoi_u(optarg);
break; break;
#endif # endif
case 'R': case 'R':
case 'V': case 'V':
set_local_var(xstrdup(optarg), 0, opt == 'R'); set_local_var(xstrdup(optarg), 0, opt == 'R');
@ -5178,8 +5180,8 @@ int hush_main(int argc, char **argv)
if (argv[optind]) { if (argv[optind]) {
FILE *input; FILE *input;
/* /*
* Non-interactive "bash <script>" sources $BASH_ENV here * "bash <script>" (which is never interactive (unless -i?))
* (without scanning $PATH). * sources $BASH_ENV here (without scanning $PATH).
* If called as sh, does the same but with $ENV. * If called as sh, does the same but with $ENV.
*/ */
debug_printf("running script '%s'\n", argv[optind]); debug_printf("running script '%s'\n", argv[optind]);
@ -5212,6 +5214,9 @@ int hush_main(int argc, char **argv)
if (isatty(STDIN_FILENO) && isatty(STDOUT_FILENO)) { if (isatty(STDIN_FILENO) && isatty(STDOUT_FILENO)) {
G.saved_tty_pgrp = tcgetpgrp(STDIN_FILENO); G.saved_tty_pgrp = tcgetpgrp(STDIN_FILENO);
debug_printf("saved_tty_pgrp:%d\n", G.saved_tty_pgrp); debug_printf("saved_tty_pgrp:%d\n", G.saved_tty_pgrp);
//TODO: "interactive" and "have job control" are two different things.
//If tcgetpgrp fails here, "have job control" is false, but "interactive"
//should stay on! Currently, we mix these into one.
if (G.saved_tty_pgrp >= 0) { if (G.saved_tty_pgrp >= 0) {
/* try to dup stdin to high fd#, >= 255 */ /* try to dup stdin to high fd#, >= 255 */
G_interactive_fd = fcntl(STDIN_FILENO, F_DUPFD, 255); G_interactive_fd = fcntl(STDIN_FILENO, F_DUPFD, 255);