summaryrefslogtreecommitdiff
path: root/libs/ode-0.16.1/tests/UnitTest++/src/Posix/SignalTranslator.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ode-0.16.1/tests/UnitTest++/src/Posix/SignalTranslator.h')
-rw-r--r--libs/ode-0.16.1/tests/UnitTest++/src/Posix/SignalTranslator.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/libs/ode-0.16.1/tests/UnitTest++/src/Posix/SignalTranslator.h b/libs/ode-0.16.1/tests/UnitTest++/src/Posix/SignalTranslator.h
new file mode 100644
index 0000000..dfa0d11
--- /dev/null
+++ b/libs/ode-0.16.1/tests/UnitTest++/src/Posix/SignalTranslator.h
@@ -0,0 +1,42 @@
+#ifndef UNITTEST_SIGNALTRANSLATOR_H
+#define UNITTEST_SIGNALTRANSLATOR_H
+
+#include <setjmp.h>
+#include <signal.h>
+
+namespace UnitTest {
+
+class SignalTranslator
+{
+public:
+ SignalTranslator();
+ ~SignalTranslator();
+
+ static sigjmp_buf* s_jumpTarget;
+
+private:
+ sigjmp_buf m_currentJumpTarget;
+ sigjmp_buf* m_oldJumpTarget;
+
+ struct sigaction m_old_SIGFPE_action;
+ struct sigaction m_old_SIGTRAP_action;
+ struct sigaction m_old_SIGSEGV_action;
+ struct sigaction m_old_SIGBUS_action;
+ struct sigaction m_old_SIGABRT_action;
+ struct sigaction m_old_SIGALRM_action;
+};
+
+#ifdef SOLARIS
+ #define UNITTEST_EXTENSION
+#else
+ #define UNITTEST_EXTENSION __extension__
+#endif
+
+#define UNITTEST_THROW_SIGNALS \
+ UnitTest::SignalTranslator sig; \
+ if (UNITTEST_EXTENSION sigsetjmp(*UnitTest::SignalTranslator::s_jumpTarget, 1) != 0) \
+ throw ("Unhandled system exception");
+
+}
+
+#endif