9
9
10
10
#include " cpp-terminal/private/signals.hpp"
11
11
12
- #include " cpp-terminal/terminal.hpp"
12
+ #include " cpp-terminal/terminal_impl.hpp"
13
+ #include " signals.hpp"
13
14
14
15
#include < algorithm>
15
16
#include < csignal>
19
20
#endif
20
21
21
22
#ifdef _WIN32
22
- #include < windows.h>
23
- static BOOL WINAPI consoleHandler (DWORD signal)
23
+ #include < windows.h>
24
+ static BOOL WINAPI consoleHandler (DWORD signal)
25
+ {
26
+ switch (signal)
27
+ {
28
+ case CTRL_C_EVENT:
29
+ case CTRL_BREAK_EVENT:
24
30
{
25
- switch (signal)
26
- {
27
- case CTRL_C_EVENT:
28
- case CTRL_BREAK_EVENT:
29
- {
30
- Term::Private::Signals::reset_and_raise (Term::terminal);
31
- return false ;
32
- }
33
- default : return false ;
34
- }
31
+ Term::Private::Signals::reset_and_raise (Term::terminal);
32
+ return false ;
35
33
}
34
+ default : return false ;
35
+ }
36
+ }
36
37
#endif
37
38
38
39
const std::size_t Term::Private::Signals::m_signals_number{NSIG - 1 };
39
40
40
41
void Term::Private::Signals::setHandler (const sighandler_t & handler) noexcept
41
42
{
42
43
for (std::size_t signal = 0 ; signal != m_signals_number; ++signal)
43
- {
44
- #ifdef _WIN32
45
- if (signal!= SIGINT) sighandler_t hand = std::signal (signal, handler);
46
- #else
47
- sighandler_t hand = std::signal (signal, handler);
48
- #endif
44
+ {
45
+ #ifdef _WIN32
46
+ if (signal != SIGINT) sighandler_t hand = std::signal (signal, handler);
47
+ #else
48
+ sighandler_t hand = std::signal (signal, handler);
49
+ #endif
49
50
}
50
- #ifdef _WIN32
51
+ #ifdef _WIN32
51
52
SetConsoleCtrlHandler (consoleHandler, TRUE );
52
- #endif
53
+ #endif
53
54
}
54
55
55
- Term::Private::Signals::Signals (std::vector< sighandler_t >& m_han ) noexcept
56
+ Term::Private::Signals::Signals () noexcept
56
57
{
57
- const static std::vector<int > ignore{
58
- #if defined(SIGCONT)
59
- SIGCONT,
60
- #endif
61
- #if defined(SIGSTOP)
62
- SIGSTOP,
63
- #endif
64
- #if defined(SIGTSTP)
65
- SIGTSTP,
66
- #endif
67
- #if defined(SIGTTIN)
68
- SIGTTIN,
69
- #endif
70
- #if defined(SIGTTOU)
71
- SIGTTOU,
72
- #endif
73
- };
74
- m_han.reserve (m_signals_number);
58
+ m_handlers.reserve (m_signals_number);
75
59
for (std::size_t signal = 0 ; signal != m_signals_number; ++signal)
76
60
{
77
61
// if(std::find(ignore.begin(),ignore.end(),signal)==ignore.end())
78
62
// {
79
63
sighandler_t old = std::signal (signal, SIG_DFL);
80
64
// sighandler_t dumb=std::signal(signal, old);
81
- m_han .push_back (old);
65
+ m_handlers .push_back (old);
82
66
// }
83
67
// else
84
68
// {
@@ -88,12 +72,9 @@ Term::Private::Signals::Signals(std::vector<sighandler_t>& m_han) noexcept
88
72
}
89
73
}
90
74
91
- void Term::Private::Signals::reset_and_raise (Term::Terminal& term) noexcept
92
- {
93
- term.clean ();
94
- }
75
+ void Term::Private::Signals::reset_and_raise (Term::Terminal& term) noexcept { term.clean (); }
95
76
96
- void Term::Private::Signals::reset_and_raise (int sign, std::vector< sighandler_t >& m_han, Term::Terminal& term) noexcept
77
+ void Term::Private::Signals::reset_and_raise (int sign, Term::Terminal& term) noexcept
97
78
{
98
79
const static std::vector<int > termin{
99
80
#if defined(SIGHUP)
@@ -183,8 +164,8 @@ void Term::Private::Signals::reset_and_raise(int sign, std::vector<sighandler_t>
183
164
};
184
165
if (std::find (termin.begin (), termin.end (), sign) != termin.end ())
185
166
{
186
- sighandler_t old = std::signal (sign, m_han [sign]);
187
- old = std::signal (sign, m_han [sign]);
167
+ sighandler_t old = std::signal (sign, m_handlers [sign]);
168
+ old = std::signal (sign, m_handlers [sign]);
188
169
term.clean ();
189
170
std::raise (sign);
190
171
}
0 commit comments