summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/SignalHandler.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2008-01-17 15:06:38 -0330
committerDwayne Boone <dwayne@zeroc.com>2008-01-17 15:06:38 -0330
commit7fa8d64b01cd06de695172d9db2654c31e8dc06e (patch)
tree14a74a3fe72b2cdde486ba3332ad38e90e7319a8 /cpp/src/Slice/SignalHandler.cpp
parentTemporary fix for Windows compiles (diff)
downloadice-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.cpp36
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();
}