From 68b402ee51f12f8c3b11638b042f57e025359faf Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 13 Jan 2022 01:05:03 +0100 Subject: ash: ^C with SIG_INGed SIGINT should not exit the shell function old new delta __pgetc 501 522 +21 Signed-off-by: Denys Vlasenko --- shell/ash.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'shell') diff --git a/shell/ash.c b/shell/ash.c index 4c5dd1298..12b2db3a9 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -10784,18 +10784,24 @@ preadfd(void) line_input_state->path_lookup = pathval(); # endif reinit_unicode_for_ash(); + again: nr = read_line_input(line_input_state, cmdedit_prompt, buf, IBUFSIZ); if (nr == 0) { /* ^C pressed, "convert" to SIGINT */ write(STDOUT_FILENO, "^C", 2); raise(SIGINT); + /* raise(SIGINT) did not work! (e.g. if SIGINT + * is SIG_INGed on startup, it stays SIG_IGNed) + */ if (trap[SIGINT]) { buf[0] = '\n'; buf[1] = '\0'; return 1; } exitstatus = 128 + SIGINT; - return -1; + /* bash behavior on ^C + ignored SIGINT: */ + write(STDOUT_FILENO, "\n", 1); + goto again; } if (nr < 0) { if (errno == 0) { -- cgit v1.2.3-55-g6feb