1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
use std::convert::TryFrom;
use std::io;
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum Signal {
Abrt,
Alrm,
Bus,
Chld,
Cont,
Fpe,
Hup,
Ill,
Int,
Kill,
Pipe,
Quit,
Segv,
Stop,
Term,
Tstp,
Ttin,
Ttou,
Usr1,
Usr2,
#[cfg(not(target_os = "macos"))]
Poll,
Prof,
Sys,
Trap,
Urg,
VtAlrm,
XCpu,
XFsz,
}
impl TryFrom<libc::c_int> for Signal {
type Error = io::Error;
fn try_from(value: libc::c_int) -> io::Result<Self> {
match value {
libc::SIGABRT => Ok(Signal::Abrt),
libc::SIGALRM => Ok(Signal::Alrm),
libc::SIGBUS => Ok(Signal::Bus),
libc::SIGCHLD => Ok(Signal::Chld),
libc::SIGCONT => Ok(Signal::Cont),
libc::SIGFPE => Ok(Signal::Fpe),
libc::SIGHUP => Ok(Signal::Hup),
libc::SIGILL => Ok(Signal::Ill),
libc::SIGINT => Ok(Signal::Int),
libc::SIGKILL => Ok(Signal::Kill),
libc::SIGPIPE => Ok(Signal::Pipe),
libc::SIGQUIT => Ok(Signal::Quit),
libc::SIGSEGV => Ok(Signal::Segv),
libc::SIGSTOP => Ok(Signal::Stop),
libc::SIGTERM => Ok(Signal::Term),
libc::SIGTSTP => Ok(Signal::Tstp),
libc::SIGTTIN => Ok(Signal::Ttin),
libc::SIGTTOU => Ok(Signal::Ttou),
libc::SIGUSR1 => Ok(Signal::Usr1),
libc::SIGUSR2 => Ok(Signal::Usr2),
#[cfg(not(target_os = "macos"))]
libc::SIGPOLL => Ok(Signal::Poll),
libc::SIGPROF => Ok(Signal::Prof),
libc::SIGSYS => Ok(Signal::Sys),
libc::SIGTRAP => Ok(Signal::Trap),
libc::SIGURG => Ok(Signal::Urg),
libc::SIGVTALRM => Ok(Signal::VtAlrm),
libc::SIGXCPU => Ok(Signal::XCpu),
libc::SIGXFSZ => Ok(Signal::XFsz),
_ => Err(io::Error::from(io::ErrorKind::InvalidInput)),
}
}
}
impl From<Signal> for libc::c_int {
fn from(signal: Signal) -> Self {
match signal {
Signal::Abrt => libc::SIGABRT,
Signal::Alrm => libc::SIGALRM,
Signal::Bus => libc::SIGBUS,
Signal::Chld => libc::SIGCHLD,
Signal::Cont => libc::SIGCONT,
Signal::Fpe => libc::SIGFPE,
Signal::Hup => libc::SIGHUP,
Signal::Ill => libc::SIGILL,
Signal::Int => libc::SIGINT,
Signal::Kill => libc::SIGKILL,
Signal::Pipe => libc::SIGPIPE,
Signal::Quit => libc::SIGQUIT,
Signal::Segv => libc::SIGSEGV,
Signal::Stop => libc::SIGSTOP,
Signal::Term => libc::SIGTERM,
Signal::Tstp => libc::SIGTSTP,
Signal::Ttin => libc::SIGTTIN,
Signal::Ttou => libc::SIGTTOU,
Signal::Usr1 => libc::SIGUSR1,
Signal::Usr2 => libc::SIGUSR2,
#[cfg(not(target_os = "macos"))]
Signal::Poll => libc::SIGPOLL,
Signal::Prof => libc::SIGPROF,
Signal::Sys => libc::SIGSYS,
Signal::Trap => libc::SIGTRAP,
Signal::Urg => libc::SIGURG,
Signal::VtAlrm => libc::SIGVTALRM,
Signal::XCpu => libc::SIGXCPU,
Signal::XFsz => libc::SIGXFSZ,
}
}
}