diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2008-01-17 15:06:38 -0330 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2008-01-17 15:06:38 -0330 |
commit | 7fa8d64b01cd06de695172d9db2654c31e8dc06e (patch) | |
tree | 14a74a3fe72b2cdde486ba3332ad38e90e7319a8 /cpp/src/Slice/SignalHandler.cpp | |
parent | Temporary fix for Windows compiles (diff) | |
download | ice-7fa8d64b01cd06de695172d9db2654c31e8dc06e.tar.bz2 ice-7fa8d64b01cd06de695172d9db2654c31e8dc06e.tar.xz ice-7fa8d64b01cd06de695172d9db2654c31e8dc06e.zip |
Added Windows signal handling
Diffstat (limited to 'cpp/src/Slice/SignalHandler.cpp')
-rw-r--r-- | cpp/src/Slice/SignalHandler.cpp | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/cpp/src/Slice/SignalHandler.cpp b/cpp/src/Slice/SignalHandler.cpp index db80d58e181..b1606a6b4f1 100644 --- a/cpp/src/Slice/SignalHandler.cpp +++ b/cpp/src/Slice/SignalHandler.cpp @@ -9,9 +9,13 @@ #include <IceUtil/DisableWarnings.h> #include <Slice/SignalHandler.h> -#include <signal.h> #include <vector> +#ifndef _WIN32 +# include <signal.h> +#endif + + using namespace std; // @@ -20,29 +24,41 @@ using namespace std; // static vector<string> _fileList; -static void -signalHandler(int signal) +#ifdef _WIN32 +static BOOL WINAPI signalHandler(DWORD dwCtrlType) +#else +static void signalHandler(int signal) +#endif { for(unsigned int i = 0; i < _fileList.size(); ++i) { - unlink(_fileList[i].c_str()); + remove(_fileList[i].c_str()); } exit(1); } + Slice::SignalHandler::SignalHandler() { - //sigset(SIGHUP, signalHandler); - //sigset(SIGINT, signalHandler); - //sigset(SIGQUIT, signalHandler); +#ifdef _WIN32 + SetConsoleCtrlHandler(signalHandler, TRUE); +#else + sigset(SIGHUP, signalHandler); + sigset(SIGINT, signalHandler); + sigset(SIGQUIT, signalHandler); +#endif } Slice::SignalHandler::~SignalHandler() { - //sigset(SIGHUP, SIG_DFL); - //sigset(SIGINT, SIG_DFL); - //sigset(SIGQUIT, SIG_DFL); +#ifdef _WIN32 + SetConsoleCtrlHandler(signalHandler, FALSE); +#else + sigset(SIGHUP, SIG_DFL); + sigset(SIGINT, SIG_DFL); + sigset(SIGQUIT, SIG_DFL); +#endif _fileList.clear(); } |