@@ -10,21 +10,27 @@ Copyright (C) 2024, Haenn Quentin.
1010#include <stdio.h>
1111#include <stdlib.h>
1212#include <string.h>
13- #include <signal.h>
1413#include <time.h>
14+ #include <assert.h>
15+ #include <math.h>
16+
1517#ifdef _WIN32
16- #include <windows.h>
18+ #include <windows.h>
19+ #include <process.h>
20+ #include <direct.h>
21+ #define SIGINT 2
22+ typedef void (* SignalHandlerFn )(int );
1723#elif defined(__APPLE__ ) || defined(__linux__ )
18- #include <sys/time.h>
19- #include <sys/resource.h>
20- #include <sys/types.h>
24+ #include <sys/time.h>
25+ #include <sys/resource.h>
26+ #include <sys/types.h>
27+ #include <unistd.h>
28+ #include <signal.h>
2129#else
22- #error "Unsupported platform"
30+ #error "Unsupported platform"
2331#endif
24- #include <limits.h>
25- #include <unistd.h>
26- #include <math.h>
27- #include <assert.h>
32+
33+
2834#include "mds3-util.h"
2935#include "util_heap.h"
3036
@@ -1590,6 +1596,24 @@ void cleanup(){
15901596 }
15911597}
15921598
1599+ #ifdef _WIN32
1600+ static BOOL WINAPI win32_handler (DWORD signal ) {
1601+ if (signal == CTRL_C_EVENT ) {
1602+ handler (SIGINT );
1603+ return TRUE;
1604+ }
1605+ return FALSE;
1606+ }
1607+
1608+ static void setup_signal_handler (SignalHandlerFn handler_fn ) {
1609+ SetConsoleCtrlHandler (win32_handler , TRUE);
1610+ }
1611+ #else
1612+ static void setup_signal_handler (void (* handler_fn )(int )) {
1613+ signal (SIGINT , handler_fn );
1614+ }
1615+ #endif
1616+
15931617void handler (int sig ) {
15941618 cleanup ();
15951619 exit (sig );
@@ -1598,7 +1622,7 @@ void handler(int sig) {
15981622struct Result * emos_main (int * edges , int n , int nb_edge ) {
15991623
16001624 // Set the signal handler
1601- signal (SIGINT , handler );
1625+ setup_signal_handler (SIGINT , handler );
16021626
16031627 _read_graph_from_edge_list (edges , n , nb_edge );
16041628 NB_NODE_O = NB_NODE ;
0 commit comments