From 0a445c9f76f27f66ca920ccfd6f00d9a888914a7 Mon Sep 17 00:00:00 2001 From: Chris Aumann Date: Tue, 14 Mar 2017 17:18:43 +0100 Subject: [PATCH] Move convert_to_libc() method to signal.rs --- src/process.rs | 17 ++--------------- src/signal.rs | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/process.rs b/src/process.rs index e0b95268..0d52f1f7 100644 --- a/src/process.rs +++ b/src/process.rs @@ -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); } diff --git a/src/signal.rs b/src/signal.rs index 751b1a30..cbaf3dfb 100644 --- a/src/signal.rs +++ b/src/signal.rs @@ -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>> = 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::*;