diff options
author | 2015-05-27 15:00:06 +0200 | |
---|---|---|
committer | 2015-05-27 15:00:06 +0200 | |
commit | ee4adf600bdd3aa60cc0e92a39f2111be0a90bc6 (patch) | |
tree | 5ecb86b72eef1c19ad3ab6c7ba8d8b2a964e0cb9 /3rdparty/unittest-cpp/UnitTest++/Posix/SignalTranslator.cpp | |
parent | 55fa9840f263361efc73126c3f41be606fea7168 (diff) |
Added library for supporting unit tests (nw)
Diffstat (limited to '3rdparty/unittest-cpp/UnitTest++/Posix/SignalTranslator.cpp')
-rw-r--r-- | 3rdparty/unittest-cpp/UnitTest++/Posix/SignalTranslator.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
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; +} + + +} |