mirror of
https://github.com/sheumann/hush.git
synced 2024-08-26 12:29:04 +00:00
hush: mark SIGHUP TODOs better; don't disable SIGHUP for now,
small tweaks to comments
This commit is contained in:
parent
a0e65120b5
commit
d3f973eab2
25
shell/hush.c
25
shell/hush.c
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user