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