1 #ifndef UNITTEST_SIGNALTRANSLATOR_H 2 #define UNITTEST_SIGNALTRANSLATOR_H 3 4 #if defined(__ORBIS__) 5 6 7 #else 8 9 #include <setjmp.h> 10 #include <signal.h> 11 12 namespace UnitTest { 13 14 class SignalTranslator 15 { 16 public: 17 SignalTranslator(); 18 ~SignalTranslator(); 19 20 static sigjmp_buf* s_jumpTarget; 21 22 private: 23 sigjmp_buf m_currentJumpTarget; 24 sigjmp_buf* m_oldJumpTarget; 25 26 struct sigaction m_old_SIGFPE_action; 27 struct sigaction m_old_SIGTRAP_action; 28 struct sigaction m_old_SIGSEGV_action; 29 struct sigaction m_old_SIGBUS_action; 30 //struct sigaction m_old_SIGABRT_action; 31 //struct sigaction m_old_SIGALRM_action; 32 }; 33 34 #if !defined (__GNUC__) 35 #define UNITTEST_EXTENSION 36 #else 37 #define UNITTEST_EXTENSION __extension__ 38 #endif 39 40 #define UNITTEST_THROW_SIGNALS_POSIX_ONLY \ 41 UnitTest::SignalTranslator sig; \ 42 if (UNITTEST_EXTENSION sigsetjmp(*UnitTest::SignalTranslator::s_jumpTarget, 1) != 0) \ 43 throw ("Unhandled system exception"); 44 45 } 46 47 #endif 48 49 #endif 50