From ee4adf600bdd3aa60cc0e92a39f2111be0a90bc6 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 27 May 2015 15:00:06 +0200 Subject: Added library for supporting unit tests (nw) --- .../UnitTest++/Posix/SignalTranslator.cpp | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 3rdparty/unittest-cpp/UnitTest++/Posix/SignalTranslator.cpp (limited to '3rdparty/unittest-cpp/UnitTest++/Posix/SignalTranslator.cpp') diff --git a/3rdparty/unittest-cpp/UnitTest++/Posix/SignalTranslator.cpp b/3rdparty/unittest-cpp/UnitTest++/Posix/SignalTranslator.cpp new file mode 100644 index 00000000000..3689c8c34d0 --- /dev/null +++ b/3rdparty/unittest-cpp/UnitTest++/Posix/SignalTranslator.cpp @@ -0,0 +1,46 @@ +#include "SignalTranslator.h" + +namespace UnitTest { + +sigjmp_buf* SignalTranslator::s_jumpTarget = 0; + +namespace { + +void SignalHandler(int sig) +{ + siglongjmp(*SignalTranslator::s_jumpTarget, sig ); +} + +} + + +SignalTranslator::SignalTranslator() +{ + m_oldJumpTarget = s_jumpTarget; + s_jumpTarget = &m_currentJumpTarget; + + struct sigaction action; + action.sa_flags = 0; + action.sa_handler = SignalHandler; + sigemptyset( &action.sa_mask ); + + sigaction( SIGSEGV, &action, &m_old_SIGSEGV_action ); + sigaction( SIGFPE , &action, &m_old_SIGFPE_action ); + sigaction( SIGTRAP, &action, &m_old_SIGTRAP_action ); + sigaction( SIGBUS , &action, &m_old_SIGBUS_action ); + sigaction( SIGILL , &action, &m_old_SIGBUS_action ); +} + +SignalTranslator::~SignalTranslator() +{ + sigaction( SIGILL , &m_old_SIGBUS_action , 0 ); + sigaction( SIGBUS , &m_old_SIGBUS_action , 0 ); + sigaction( SIGTRAP, &m_old_SIGTRAP_action, 0 ); + sigaction( SIGFPE , &m_old_SIGFPE_action , 0 ); + sigaction( SIGSEGV, &m_old_SIGSEGV_action, 0 ); + + s_jumpTarget = m_oldJumpTarget; +} + + +} -- cgit v1.2.3