1extern crate nix;
27
28use nix::sys::signal::Signal;
29
30#[derive(Copy, Clone, PartialEq, std::fmt::Debug)]
34#[allow(dead_code)]
35pub enum UnixSignal {
36 Sighup = 1,
37 Sigint = 2,
38 Sigquit = 3,
39 Sigill = 4,
40 Sigtrap = 5,
41 Sigabrt = 6,
42 Sigbus = 7,
43 Sigfpe = 8,
44 Sigkill = 9,
45 Sigusr1 = 10,
46 Sigsegv = 11,
47 Sigusr2 = 12,
48 Sigpipe = 13,
49 Sigalrm = 14,
50 Sigterm = 15,
51 Sigstkflt = 16,
52 Sigchld = 17,
53 Sigcont = 18,
54 Sigstop = 19,
55 Sigtstp = 20,
56 Sigttin = 21,
57 Sigttou = 22,
58 Sigurg = 23,
59 Sigxcpu = 24,
60 Sigxfsz = 25,
61 Sigvtalrm = 26,
62 Sigprof = 27,
63 Sigwinch = 28,
64 Sigio = 29,
65 Sigpwr = 30,
66 Sigsys = 31
67}
68
69impl UnixSignal {
70
71 #[allow(dead_code)]
75 pub fn from_u8(sig: u8) -> Option<UnixSignal> {
76 match sig {
77 1 => Some(UnixSignal::Sighup),
78 2 => Some(UnixSignal::Sigint),
79 3 => Some(UnixSignal::Sigquit),
80 4 => Some(UnixSignal::Sigill),
81 5 => Some(UnixSignal::Sigtrap),
82 6 => Some(UnixSignal::Sigabrt),
83 7 => Some(UnixSignal::Sigbus),
84 8 => Some(UnixSignal::Sigfpe),
85 9 => Some(UnixSignal::Sigkill),
86 10 => Some(UnixSignal::Sigusr1),
87 11 => Some(UnixSignal::Sigsegv),
88 12 => Some(UnixSignal::Sigusr2),
89 13 => Some(UnixSignal::Sigpipe),
90 14 => Some(UnixSignal::Sigalrm),
91 15 => Some(UnixSignal::Sigterm),
92 16 => Some(UnixSignal::Sigstkflt),
93 17 => Some(UnixSignal::Sigchld),
94 18 => Some(UnixSignal::Sigcont),
95 19 => Some(UnixSignal::Sigstop),
96 20 => Some(UnixSignal::Sigtstp),
97 21 => Some(UnixSignal::Sigttin),
98 22 => Some(UnixSignal::Sigttou),
99 23 => Some(UnixSignal::Sigurg),
100 24 => Some(UnixSignal::Sigxcpu),
101 25 => Some(UnixSignal::Sigxfsz),
102 26 => Some(UnixSignal::Sigvtalrm),
103 27 => Some(UnixSignal::Sigprof),
104 28 => Some(UnixSignal::Sigwinch),
105 29 => Some(UnixSignal::Sigio),
106 30 => Some(UnixSignal::Sigpwr),
107 31 => Some(UnixSignal::Sigsys),
108 _ => None
109 }
110 }
111
112 #[cfg(target_os = "macos")]
113 #[cfg(not(tarpaulin_include))]
114 pub fn to_nix_signal(&self) -> Signal {
118 match self {
119 UnixSignal::Sigabrt => Signal::SIGABRT,
120 UnixSignal::Sigalrm => Signal::SIGALRM,
121 UnixSignal::Sigbus => Signal::SIGBUS,
122 UnixSignal::Sigchld => Signal::SIGCHLD,
123 UnixSignal::Sigcont => Signal::SIGCONT,
124 UnixSignal::Sigfpe => Signal::SIGFPE,
125 UnixSignal::Sighup => Signal::SIGHUP,
126 UnixSignal::Sigill => Signal::SIGILL,
127 UnixSignal::Sigint => Signal::SIGINT,
128 UnixSignal::Sigio => Signal::SIGIO,
129 UnixSignal::Sigkill => Signal::SIGKILL,
130 UnixSignal::Sigpipe => Signal::SIGPIPE,
131 UnixSignal::Sigprof => Signal::SIGPROF,
132 UnixSignal::Sigpwr => Signal::SIGABRT,
133 UnixSignal::Sigquit => Signal::SIGQUIT,
134 UnixSignal::Sigsegv => Signal::SIGSEGV,
135 UnixSignal::Sigstkflt => Signal::SIGABRT,
136 UnixSignal::Sigstop => Signal::SIGSTOP,
137 UnixSignal::Sigsys => Signal::SIGSYS,
138 UnixSignal::Sigterm => Signal::SIGTERM,
139 UnixSignal::Sigtrap => Signal::SIGTRAP,
140 UnixSignal::Sigtstp => Signal::SIGTSTP,
141 UnixSignal::Sigttin => Signal::SIGTTIN,
142 UnixSignal::Sigttou => Signal::SIGTTOU,
143 UnixSignal::Sigurg => Signal::SIGURG,
144 UnixSignal::Sigusr1 => Signal::SIGUSR1,
145 UnixSignal::Sigusr2 => Signal::SIGUSR2,
146 UnixSignal::Sigvtalrm => Signal::SIGVTALRM,
147 UnixSignal::Sigwinch => Signal::SIGWINCH,
148 UnixSignal::Sigxcpu => Signal::SIGXCPU,
149 UnixSignal::Sigxfsz => Signal::SIGXFSZ
150 }
151 }
152
153 #[cfg(any(target_os = "freebsd", target_os = "linux", target_os = "openbsd", target_os = "netbsd"))]
154 pub fn to_nix_signal(&self) -> Signal {
158 match self {
159 UnixSignal::Sigabrt => Signal::SIGABRT,
160 UnixSignal::Sigalrm => Signal::SIGALRM,
161 UnixSignal::Sigbus => Signal::SIGBUS,
162 UnixSignal::Sigchld => Signal::SIGCHLD,
163 UnixSignal::Sigcont => Signal::SIGCONT,
164 UnixSignal::Sigfpe => Signal::SIGFPE,
165 UnixSignal::Sighup => Signal::SIGHUP,
166 UnixSignal::Sigill => Signal::SIGILL,
167 UnixSignal::Sigint => Signal::SIGINT,
168 UnixSignal::Sigio => Signal::SIGIO,
169 UnixSignal::Sigkill => Signal::SIGKILL,
170 UnixSignal::Sigpipe => Signal::SIGPIPE,
171 UnixSignal::Sigprof => Signal::SIGPROF,
172 UnixSignal::Sigpwr => Signal::SIGPWR,
173 UnixSignal::Sigquit => Signal::SIGQUIT,
174 UnixSignal::Sigsegv => Signal::SIGSEGV,
175 UnixSignal::Sigstkflt => Signal::SIGSTKFLT,
176 UnixSignal::Sigstop => Signal::SIGSTOP,
177 UnixSignal::Sigsys => Signal::SIGSYS,
178 UnixSignal::Sigterm => Signal::SIGTERM,
179 UnixSignal::Sigtrap => Signal::SIGTRAP,
180 UnixSignal::Sigtstp => Signal::SIGTSTP,
181 UnixSignal::Sigttin => Signal::SIGTTIN,
182 UnixSignal::Sigttou => Signal::SIGTTOU,
183 UnixSignal::Sigurg => Signal::SIGURG,
184 UnixSignal::Sigusr1 => Signal::SIGUSR1,
185 UnixSignal::Sigusr2 => Signal::SIGUSR2,
186 UnixSignal::Sigvtalrm => Signal::SIGVTALRM,
187 UnixSignal::Sigwinch => Signal::SIGWINCH,
188 UnixSignal::Sigxcpu => Signal::SIGXCPU,
189 UnixSignal::Sigxfsz => Signal::SIGXFSZ
190 }
191 }
192}
193
194#[cfg(test)]
195mod tests {
196
197 use super::*;
198
199 #[test]
200 fn test_unixsignal_from_u8() {
201 assert_eq!(UnixSignal::from_u8(1).unwrap(), UnixSignal::Sighup);
202 assert_eq!(UnixSignal::from_u8(2).unwrap(), UnixSignal::Sigint);
203 assert_eq!(UnixSignal::from_u8(3).unwrap(), UnixSignal::Sigquit);
204 assert_eq!(UnixSignal::from_u8(4).unwrap(), UnixSignal::Sigill);
205 assert_eq!(UnixSignal::from_u8(5).unwrap(), UnixSignal::Sigtrap);
206 assert_eq!(UnixSignal::from_u8(6).unwrap(), UnixSignal::Sigabrt);
207 assert_eq!(UnixSignal::from_u8(7).unwrap(), UnixSignal::Sigbus);
208 assert_eq!(UnixSignal::from_u8(8).unwrap(), UnixSignal::Sigfpe);
209 assert_eq!(UnixSignal::from_u8(9).unwrap(), UnixSignal::Sigkill);
210 assert_eq!(UnixSignal::from_u8(10).unwrap(), UnixSignal::Sigusr1);
211 assert_eq!(UnixSignal::from_u8(11).unwrap(), UnixSignal::Sigsegv);
212 assert_eq!(UnixSignal::from_u8(12).unwrap(), UnixSignal::Sigusr2);
213 assert_eq!(UnixSignal::from_u8(13).unwrap(), UnixSignal::Sigpipe);
214 assert_eq!(UnixSignal::from_u8(14).unwrap(), UnixSignal::Sigalrm);
215 assert_eq!(UnixSignal::from_u8(15).unwrap(), UnixSignal::Sigterm);
216 assert_eq!(UnixSignal::from_u8(16).unwrap(), UnixSignal::Sigstkflt);
217 assert_eq!(UnixSignal::from_u8(17).unwrap(), UnixSignal::Sigchld);
218 assert_eq!(UnixSignal::from_u8(18).unwrap(), UnixSignal::Sigcont);
219 assert_eq!(UnixSignal::from_u8(19).unwrap(), UnixSignal::Sigstop);
220 assert_eq!(UnixSignal::from_u8(20).unwrap(), UnixSignal::Sigtstp);
221 assert_eq!(UnixSignal::from_u8(21).unwrap(), UnixSignal::Sigttin);
222 assert_eq!(UnixSignal::from_u8(22).unwrap(), UnixSignal::Sigttou);
223 assert_eq!(UnixSignal::from_u8(23).unwrap(), UnixSignal::Sigurg);
224 assert_eq!(UnixSignal::from_u8(24).unwrap(), UnixSignal::Sigxcpu);
225 assert_eq!(UnixSignal::from_u8(25).unwrap(), UnixSignal::Sigxfsz);
226 assert_eq!(UnixSignal::from_u8(26).unwrap(), UnixSignal::Sigvtalrm);
227 assert_eq!(UnixSignal::from_u8(27).unwrap(), UnixSignal::Sigprof);
228 assert_eq!(UnixSignal::from_u8(28).unwrap(), UnixSignal::Sigwinch);
229 assert_eq!(UnixSignal::from_u8(29).unwrap(), UnixSignal::Sigio);
230 assert_eq!(UnixSignal::from_u8(30).unwrap(), UnixSignal::Sigpwr);
231 assert_eq!(UnixSignal::from_u8(31).unwrap(), UnixSignal::Sigsys);
232 assert!(UnixSignal::from_u8(255).is_none());
233 }
234
235 #[test]
236 #[cfg(any(target_os = "freebsd", target_os = "linux", target_os = "openbsd", target_os = "netbsd"))]
237 fn test_unixsignal_to_nix() {
238 assert_eq!(UnixSignal::Sigabrt.to_nix_signal(), Signal::SIGABRT);
239 assert_eq!(UnixSignal::Sighup.to_nix_signal(), Signal::SIGHUP);
240 assert_eq!(UnixSignal::Sigint.to_nix_signal(), Signal::SIGINT);
241 assert_eq!(UnixSignal::Sigquit.to_nix_signal(), Signal::SIGQUIT);
242 assert_eq!(UnixSignal::Sigill.to_nix_signal(), Signal::SIGILL);
243 assert_eq!(UnixSignal::Sigtrap.to_nix_signal(), Signal::SIGTRAP);
244 assert_eq!(UnixSignal::Sigbus.to_nix_signal(), Signal::SIGBUS);
245 assert_eq!(UnixSignal::Sigfpe.to_nix_signal(), Signal::SIGFPE);
246 assert_eq!(UnixSignal::Sigkill.to_nix_signal(), Signal::SIGKILL);
247 assert_eq!(UnixSignal::Sigusr1.to_nix_signal(), Signal::SIGUSR1);
248 assert_eq!(UnixSignal::Sigsegv.to_nix_signal(), Signal::SIGSEGV);
249 assert_eq!(UnixSignal::Sigusr2.to_nix_signal(), Signal::SIGUSR2);
250 assert_eq!(UnixSignal::Sigpipe.to_nix_signal(), Signal::SIGPIPE);
251 assert_eq!(UnixSignal::Sigalrm.to_nix_signal(), Signal::SIGALRM);
252 assert_eq!(UnixSignal::Sigterm.to_nix_signal(), Signal::SIGTERM);
253 assert_eq!(UnixSignal::Sigstkflt.to_nix_signal(), Signal::SIGSTKFLT);
254 assert_eq!(UnixSignal::Sigchld.to_nix_signal(), Signal::SIGCHLD);
255 assert_eq!(UnixSignal::Sigcont.to_nix_signal(), Signal::SIGCONT);
256 assert_eq!(UnixSignal::Sigstop.to_nix_signal(), Signal::SIGSTOP);
257 assert_eq!(UnixSignal::Sigtstp.to_nix_signal(), Signal::SIGTSTP);
258 assert_eq!(UnixSignal::Sigttin.to_nix_signal(), Signal::SIGTTIN);
259 assert_eq!(UnixSignal::Sigttou.to_nix_signal(), Signal::SIGTTOU);
260 assert_eq!(UnixSignal::Sigurg.to_nix_signal(), Signal::SIGURG);
261 assert_eq!(UnixSignal::Sigxcpu.to_nix_signal(), Signal::SIGXCPU);
262 assert_eq!(UnixSignal::Sigxfsz.to_nix_signal(), Signal::SIGXFSZ);
263 assert_eq!(UnixSignal::Sigvtalrm.to_nix_signal(), Signal::SIGVTALRM);
264 assert_eq!(UnixSignal::Sigprof.to_nix_signal(), Signal::SIGPROF);
265 assert_eq!(UnixSignal::Sigwinch.to_nix_signal(), Signal::SIGWINCH);
266 assert_eq!(UnixSignal::Sigio.to_nix_signal(), Signal::SIGIO);
267 assert_eq!(UnixSignal::Sigpwr.to_nix_signal(), Signal::SIGPWR);
268 assert_eq!(UnixSignal::Sigsys.to_nix_signal(), Signal::SIGSYS);
269 }
270
271 #[test]
272 #[cfg(target_os = "macos")]
273 fn test_unixsignal_to_nix() {
274 assert_eq!(UnixSignal::Sigabrt.to_nix_signal(), Signal::SIGABRT);
275 assert_eq!(UnixSignal::Sighup.to_nix_signal(), Signal::SIGHUP);
276 assert_eq!(UnixSignal::Sigint.to_nix_signal(), Signal::SIGINT);
277 assert_eq!(UnixSignal::Sigquit.to_nix_signal(), Signal::SIGQUIT);
278 assert_eq!(UnixSignal::Sigill.to_nix_signal(), Signal::SIGILL);
279 assert_eq!(UnixSignal::Sigtrap.to_nix_signal(), Signal::SIGTRAP);
280 assert_eq!(UnixSignal::Sigbus.to_nix_signal(), Signal::SIGBUS);
281 assert_eq!(UnixSignal::Sigfpe.to_nix_signal(), Signal::SIGFPE);
282 assert_eq!(UnixSignal::Sigkill.to_nix_signal(), Signal::SIGKILL);
283 assert_eq!(UnixSignal::Sigusr1.to_nix_signal(), Signal::SIGUSR1);
284 assert_eq!(UnixSignal::Sigsegv.to_nix_signal(), Signal::SIGSEGV);
285 assert_eq!(UnixSignal::Sigusr2.to_nix_signal(), Signal::SIGUSR2);
286 assert_eq!(UnixSignal::Sigpipe.to_nix_signal(), Signal::SIGPIPE);
287 assert_eq!(UnixSignal::Sigalrm.to_nix_signal(), Signal::SIGALRM);
288 assert_eq!(UnixSignal::Sigterm.to_nix_signal(), Signal::SIGTERM);
289 assert_eq!(UnixSignal::Sigstkflt.to_nix_signal(), Signal::SIGABRT);
290 assert_eq!(UnixSignal::Sigchld.to_nix_signal(), Signal::SIGCHLD);
291 assert_eq!(UnixSignal::Sigcont.to_nix_signal(), Signal::SIGCONT);
292 assert_eq!(UnixSignal::Sigstop.to_nix_signal(), Signal::SIGSTOP);
293 assert_eq!(UnixSignal::Sigtstp.to_nix_signal(), Signal::SIGTSTP);
294 assert_eq!(UnixSignal::Sigttin.to_nix_signal(), Signal::SIGTTIN);
295 assert_eq!(UnixSignal::Sigttou.to_nix_signal(), Signal::SIGTTOU);
296 assert_eq!(UnixSignal::Sigurg.to_nix_signal(), Signal::SIGURG);
297 assert_eq!(UnixSignal::Sigxcpu.to_nix_signal(), Signal::SIGXCPU);
298 assert_eq!(UnixSignal::Sigxfsz.to_nix_signal(), Signal::SIGXFSZ);
299 assert_eq!(UnixSignal::Sigvtalrm.to_nix_signal(), Signal::SIGVTALRM);
300 assert_eq!(UnixSignal::Sigprof.to_nix_signal(), Signal::SIGPROF);
301 assert_eq!(UnixSignal::Sigwinch.to_nix_signal(), Signal::SIGWINCH);
302 assert_eq!(UnixSignal::Sigio.to_nix_signal(), Signal::SIGIO);
303 assert_eq!(UnixSignal::Sigpwr.to_nix_signal(), Signal::SIGABRT);
304 assert_eq!(UnixSignal::Sigsys.to_nix_signal(), Signal::SIGSYS);
305 }
306}