From 3265acbcea4811a968c2c0e15f84873573724adc Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Wed, 31 May 2017 15:13:41 -0400 Subject: [PATCH] Port: handle ctrl+c on Mingw MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Jeanson Signed-off-by: Jérémie Galarneau --- cli/babeltrace.c | 57 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/cli/babeltrace.c b/cli/babeltrace.c index 8c0c50de..025fc922 100644 --- a/cli/babeltrace.c +++ b/cli/babeltrace.c @@ -89,8 +89,30 @@ static bool canceled = false; GPtrArray *loaded_plugins; +#ifdef __MINGW32__ +#include + +static +BOOL WINAPI signal_handler(DWORD signal) { + if (the_graph) { + bt_graph_cancel(the_graph); + } + + canceled = true; + + return TRUE; +} + static -void sigint_handler(int signum) +void set_signal_handler(void) +{ + if (!SetConsoleCtrlHandler(signal_handler, TRUE)) { + BT_LOGE("Failed to set the ctrl+c handler."); + } +} +#else /* __MINGW32__ */ +static +void signal_handler(int signum) { if (signum != SIGINT) { return; @@ -103,6 +125,22 @@ void sigint_handler(int signum) canceled = true; } +static +void set_signal_handler(void) +{ + struct sigaction new_action, old_action; + + new_action.sa_handler = signal_handler; + sigemptyset(&new_action.sa_mask); + new_action.sa_flags = 0; + sigaction(SIGINT, NULL, &old_action); + + if (old_action.sa_handler != SIG_IGN) { + sigaction(SIGINT, &new_action, NULL); + } +} +#endif /* __MINGW32__ */ + static void init_static_data(void) { @@ -2623,21 +2661,6 @@ void set_auto_log_levels(struct bt_config *cfg) } } -static -void set_sigint_handler(void) -{ - struct sigaction new_action, old_action; - - new_action.sa_handler = sigint_handler; - sigemptyset(&new_action.sa_mask); - new_action.sa_flags = 0; - sigaction(SIGINT, NULL, &old_action); - - if (old_action.sa_handler != SIG_IGN) { - sigaction(SIGINT, &new_action, NULL); - } -} - int main(int argc, const char **argv) { int ret; @@ -2645,7 +2668,7 @@ int main(int argc, const char **argv) struct bt_config *cfg; init_log_level(); - set_sigint_handler(); + set_signal_handler(); init_static_data(); cfg = bt_config_cli_args_create_with_default(argc, argv, &retcode); -- 2.34.1