Skip to content

Commit 5009fe9

Browse files
committed
simplify
1 parent 095316b commit 5009fe9

File tree

3 files changed

+40
-55
lines changed

3 files changed

+40
-55
lines changed

cpp-terminal/private/signals.cpp

Lines changed: 29 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99

1010
#include "cpp-terminal/private/signals.hpp"
1111

12-
#include "cpp-terminal/terminal.hpp"
12+
#include "cpp-terminal/terminal_impl.hpp"
13+
#include "signals.hpp"
1314

1415
#include <algorithm>
1516
#include <csignal>
@@ -19,66 +20,49 @@
1920
#endif
2021

2122
#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:
2430
{
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;
3533
}
34+
default: return false;
35+
}
36+
}
3637
#endif
3738

3839
const std::size_t Term::Private::Signals::m_signals_number{NSIG - 1};
3940

4041
void Term::Private::Signals::setHandler(const sighandler_t& handler) noexcept
4142
{
4243
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
4950
}
50-
#ifdef _WIN32
51+
#ifdef _WIN32
5152
SetConsoleCtrlHandler(consoleHandler, TRUE);
52-
#endif
53+
#endif
5354
}
5455

55-
Term::Private::Signals::Signals(std::vector<sighandler_t>& m_han) noexcept
56+
Term::Private::Signals::Signals() noexcept
5657
{
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);
7559
for(std::size_t signal = 0; signal != m_signals_number; ++signal)
7660
{
7761
//if(std::find(ignore.begin(),ignore.end(),signal)==ignore.end())
7862
//{
7963
sighandler_t old = std::signal(signal, SIG_DFL);
8064
//sighandler_t dumb=std::signal(signal, old);
81-
m_han.push_back(old);
65+
m_handlers.push_back(old);
8266
//}
8367
//else
8468
//{
@@ -88,12 +72,9 @@ Term::Private::Signals::Signals(std::vector<sighandler_t>& m_han) noexcept
8872
}
8973
}
9074

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(); }
9576

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
9778
{
9879
const static std::vector<int> termin{
9980
#if defined(SIGHUP)
@@ -183,8 +164,8 @@ void Term::Private::Signals::reset_and_raise(int sign, std::vector<sighandler_t>
183164
};
184165
if(std::find(termin.begin(), termin.end(), sign) != termin.end())
185166
{
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]);
188169
term.clean();
189170
std::raise(sign);
190171
}

cpp-terminal/private/signals.hpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,24 @@ using sighandler_t = void (*)(int);
1616
namespace Term
1717
{
1818
class Terminal;
19+
1920
namespace Private
2021
{
22+
2123
class Signals
2224
{
2325
public:
24-
Signals(std::vector<sighandler_t>& m_han) noexcept;
25-
~Signals() noexcept {}
26+
Signals() noexcept;
27+
~Signals() noexcept = default;
2628
void setHandler(const sighandler_t& handler) noexcept;
27-
static void reset_and_raise(int sign, std::vector<sighandler_t>& m_han, Term::Terminal&) noexcept;
29+
void reset_and_raise(int sign, Term::Terminal&) noexcept;
2830
static void reset_and_raise(Term::Terminal&) noexcept;
2931

3032
private:
31-
const static std::size_t m_signals_number;
33+
const static std::size_t m_signals_number;
34+
std::vector<sighandler_t> m_handlers;
3235
};
36+
3337
} // namespace Private
38+
3439
} // namespace Term

cpp-terminal/terminal_initializer.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,9 @@ try
2424
if(0 == m_counter)
2525
{
2626
static const Private::FileInitializer files_init;
27-
static std::vector<sighandler_t> m_handlers;
2827
new(&Term::terminal) Terminal();
29-
static Term::Private::Signals signals(m_handlers);
30-
sighandler_t handler = [](int signum) { Term::Private::Signals::reset_and_raise(signum, m_handlers, Term::terminal); };
28+
static Term::Private::Signals signals;
29+
sighandler_t handler = [](int signum) { signals.reset_and_raise(signum, Term::terminal); };
3130
signals.setHandler(handler);
3231
}
3332
++m_counter;

0 commit comments

Comments
 (0)