Move convert_to_libc() method to signal.rs

This commit is contained in:
Chris Aumann 2017-03-14 17:18:43 +01:00
parent 4adde457dd
commit 0a445c9f76
2 changed files with 25 additions and 15 deletions

View File

@ -76,22 +76,9 @@ mod imp {
}
pub fn signal(&self, signal: Signal) {
use signal::ConvertToLibc;
// Convert from signal::Signal enum to libc::* c_int constants
// TODO: This probably belongs into signal.rs (Maybe directly using libc::SIG*)
let signo = match signal {
Signal::SIGKILL => SIGKILL,
Signal::SIGTERM => SIGTERM,
Signal::SIGINT => SIGINT,
Signal::SIGHUP => SIGHUP,
Signal::SIGSTOP => SIGSTOP,
Signal::SIGCONT => SIGCONT,
Signal::SIGCHLD => SIGCHLD,
Signal::SIGUSR1 => SIGUSR1,
Signal::SIGUSR2 => SIGUSR2,
_ => panic!("unsupported signal: {:?}", signal),
};
let signo = signal.convert_to_libc();
debug!("Sending {:?} (int: {}) to child process", signal, signo);
self.c_signal(signo);
}

View File

@ -1,3 +1,4 @@
use libc::*;
use std::sync::Mutex;
use nix::sys::signal::Signal;
@ -5,6 +6,28 @@ lazy_static! {
static ref CLEANUP: Mutex<Option<Box<Fn(self::Signal) + Send>>> = Mutex::new(None);
}
pub trait ConvertToLibc {
fn convert_to_libc(self) -> c_int;
}
impl ConvertToLibc for Signal {
fn convert_to_libc(self) -> c_int {
// Convert from signal::Signal enum to libc::* c_int constants
match self {
Signal::SIGKILL => SIGKILL,
Signal::SIGTERM => SIGTERM,
Signal::SIGINT => SIGINT,
Signal::SIGHUP => SIGHUP,
Signal::SIGSTOP => SIGSTOP,
Signal::SIGCONT => SIGCONT,
Signal::SIGCHLD => SIGCHLD,
Signal::SIGUSR1 => SIGUSR1,
Signal::SIGUSR2 => SIGUSR2,
_ => panic!("unsupported signal: {:?}", self),
}
}
}
pub fn new(signal_name: &str) -> Signal {
use nix::sys::signal::*;