#include "signalhandler.h" #include #include #ifndef _WIN32 #include #else #include #endif //!_WIN32 // There can be only ONE SignalHandler per process SignalHandler* g_handler(nullptr); #ifdef _WIN32 BOOL WINAPI WIN32_handleFunc(DWORD); int WIN32_physicalToLogical(DWORD); DWORD WIN32_logicalToPhysical(int); std::set g_registry; #else //_WIN32 void POSIX_handleFunc(int); int POSIX_physicalToLogical(int); int POSIX_logicalToPhysical(int); #endif //_WIN32 SignalHandler::SignalHandler(int mask) : _mask(mask) { assert(g_handler == nullptr); g_handler = this; #ifdef _WIN32 SetConsoleCtrlHandler(WIN32_handleFunc, TRUE); #endif //_WIN32 for (int i=0;i::const_iterator found = g_registry.find(signo); if (signo != -1 && found != g_registry.end()) { return g_handler->handleSignal(signo) ? TRUE : FALSE; } else { return FALSE; } } else { return FALSE; } } #else void POSIX_handleFunc(int signal) { if (g_handler) { int signo = POSIX_physicalToLogical(signal); g_handler->handleSignal(signo); } } #endif //_WIN32