]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/porting.cpp
fix to the previous commit
[dragonfireclient.git] / src / porting.cpp
index 592636336f14ef215e5636dc5a5b8bf54bb28ea4..e8b1352558bb7737399e79513177182f7361cde2 100644 (file)
@@ -25,10 +25,63 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include "porting.h"
 #include "config.h"
+#include "debug.h"
 
 namespace porting
 {
 
+/*
+       Signal handler (grabs Ctrl-C on POSIX systems)
+*/
+
+bool g_killed = false;
+
+bool * signal_handler_killstatus(void)
+{
+       return &g_killed;
+}
+
+#if !defined(_WIN32) // POSIX
+       #include <signal.h>
+
+void sigint_handler(int sig)
+{
+       if(g_killed == false)
+       {
+               dstream<<DTIME<<"INFO: sigint_handler(): "
+                               <<"Ctrl-C pressed, shutting down."<<std::endl;
+               
+               dstream<<DTIME<<"INFO: sigint_handler(): "
+                               <<"Printing debug stacks"<<std::endl;
+               debug_stacks_print();
+
+               g_killed = true;
+       }
+       else
+       {
+               (void)signal(SIGINT, SIG_DFL);
+       }
+}
+
+void signal_handler_init(void)
+{
+       dstream<<"signal_handler_init()"<<std::endl;
+       (void)signal(SIGINT, sigint_handler);
+}
+
+#else // _WIN32
+
+void signal_handler_init(void)
+{
+       // No-op
+}
+
+#endif
+
+/*
+       Path mangler
+*/
+
 std::string path_data = "../data";
 std::string path_userdata = "../";