summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/SignalHandler.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2008-01-17 13:11:19 -0330
committerDwayne Boone <dwayne@zeroc.com>2008-01-17 13:11:19 -0330
commita2e4ce4b60e9fac86c2cf81e3f22845a699efaa6 (patch)
treebbb1b67428ee22ec495456dc1a6bdd46f8e45236 /cpp/src/Slice/SignalHandler.cpp
parentBug 2261 - renaming Ice for C# to Ice for .NET (diff)
downloadice-a2e4ce4b60e9fac86c2cf81e3f22845a699efaa6.tar.bz2
ice-a2e4ce4b60e9fac86c2cf81e3f22845a699efaa6.tar.xz
ice-a2e4ce4b60e9fac86c2cf81e3f22845a699efaa6.zip
Bug 2540 - trap ctrl-C and unlink output files
Diffstat (limited to 'cpp/src/Slice/SignalHandler.cpp')
-rw-r--r--cpp/src/Slice/SignalHandler.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/cpp/src/Slice/SignalHandler.cpp b/cpp/src/Slice/SignalHandler.cpp
new file mode 100644
index 00000000000..69065fb6ed1
--- /dev/null
+++ b/cpp/src/Slice/SignalHandler.cpp
@@ -0,0 +1,53 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <Slice/SignalHandler.h>
+#include <signal.h>
+#include <vector>
+
+using namespace std;
+
+//
+// Signal handler routine to unlink output files in case of translator
+// being interrupted.
+//
+static vector<string> _fileList;
+
+static void
+signalHandler(int signal)
+{
+ for(unsigned int i = 0; i < _fileList.size(); ++i)
+ {
+ unlink(_fileList[i].c_str());
+ }
+
+ exit(1);
+}
+
+Slice::SignalHandler::SignalHandler()
+{
+ sigset(SIGHUP, signalHandler);
+ sigset(SIGINT, signalHandler);
+ sigset(SIGQUIT, signalHandler);
+}
+
+Slice::SignalHandler::~SignalHandler()
+{
+ sigset(SIGHUP, SIG_DFL);
+ sigset(SIGINT, SIG_DFL);
+ sigset(SIGQUIT, SIG_DFL);
+
+ _fileList.clear();
+}
+
+void
+Slice::SignalHandler::addFile(const string& file)
+{
+ _fileList.push_back(file);
+}