From 5d75effb376e2d9b708a88fb39583176eae44563 Mon Sep 17 00:00:00 2001 From: Andrew Chambers Date: Fri, 12 Nov 2021 23:24:33 +1300 Subject: [PATCH] Allow C code to block SIGINT. Previously the repl always exits on SIGINT, this change means the repl will only exit on SIGINT if the SIGINT handler causes it to exit. --- src/mainclient/shell.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/mainclient/shell.c b/src/mainclient/shell.c index 396c6762..e35d003d 100644 --- a/src/mainclient/shell.c +++ b/src/mainclient/shell.c @@ -136,7 +136,6 @@ static JANET_THREAD_LOCAL int gbl_cols = 80; static JANET_THREAD_LOCAL char *gbl_history[JANET_HISTORY_MAX]; static JANET_THREAD_LOCAL int gbl_history_count = 0; static JANET_THREAD_LOCAL int gbl_historyi = 0; -static JANET_THREAD_LOCAL int gbl_sigint_flag = 0; static JANET_THREAD_LOCAL struct termios gbl_termios_start; static JANET_THREAD_LOCAL JanetByteView gbl_matches[JANET_MATCH_MAX]; static JANET_THREAD_LOCAL int gbl_match_count = 0; @@ -758,9 +757,8 @@ static int line() { kleft(); break; case 3: /* ctrl-c */ - clearlines(); - gbl_sigint_flag = 1; - return -1; + raise(SIGINT); + /* fallthrough */ case 17: /* ctrl-q */ gbl_cancel_current_repl_form = 1; clearlines(); @@ -962,11 +960,7 @@ void janet_line_get(const char *p, JanetBuffer *buffer) { } if (line()) { norawmode(); - if (gbl_sigint_flag) { - raise(SIGINT); - } else { - fputc('\n', out); - } + fputc('\n', out); return; } fflush(stdin);