From 45d8beea46ec06ce52c512c8de5976cff85b67a2 Mon Sep 17 00:00:00 2001 From: Philipp Matthias Schaefer Date: Mon, 24 Oct 2016 21:03:30 +0200 Subject: [PATCH] Make signal argument to kill optional --- CHANGELOG.md | 6 ++++++ src/sys/signal.rs | 8 ++++++-- test/sys/mod.rs | 1 + test/sys/test_signal.rs | 7 +++++++ test/sys/test_wait.rs | 2 +- 5 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 test/sys/test_signal.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 34bc73bc2e..ea41e330e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,12 @@ This project adheres to [Semantic Versioning](http://semver.org/). ([#457](https://github.com/nix-rust/nix/pull/457)) ### Changed +- `kill`'s signature, defined in `::nix::sys::signal`, changed, so that the + signal parameter has type `T: Into>`. `None` as an argument + for that parameter will result in a 0 passed to libc's `kill`, while a + `Some`-argument will result in the previous behavior for the contained + `Signal`. + ([#445](https://github.com/nix-rust/nix/pull/410)) - The minimum supported version of rustc is now 1.7.0. ([#444](https://github.com/nix-rust/nix/pull/444)) - Implement `Send` for `KEvent` diff --git a/src/sys/signal.rs b/src/sys/signal.rs index 345e69e3a5..d9744b9443 100644 --- a/src/sys/signal.rs +++ b/src/sys/signal.rs @@ -387,8 +387,12 @@ pub fn pthread_sigmask(how: SigFlags, Errno::result(res).map(drop) } -pub fn kill(pid: libc::pid_t, signal: Signal) -> Result<()> { - let res = unsafe { libc::kill(pid, signal as libc::c_int) }; +pub fn kill>>(pid: libc::pid_t, signal: T) -> Result<()> { + let res = unsafe { libc::kill(pid, + match signal.into() { + Some(s) => s as libc::c_int, + None => 0, + }) }; Errno::result(res).map(drop) } diff --git a/test/sys/mod.rs b/test/sys/mod.rs index a5f3351df3..6176eb323c 100644 --- a/test/sys/mod.rs +++ b/test/sys/mod.rs @@ -1,3 +1,4 @@ +mod test_signal; mod test_socket; mod test_sockopt; mod test_termios; diff --git a/test/sys/test_signal.rs b/test/sys/test_signal.rs new file mode 100644 index 0000000000..4084a0da2e --- /dev/null +++ b/test/sys/test_signal.rs @@ -0,0 +1,7 @@ +use nix::unistd::*; +use nix::sys::signal::*; + +#[test] +fn test_kill_none() { + kill(getpid(), None).ok().expect("Should be able to send signal to myself."); +} diff --git a/test/sys/test_wait.rs b/test/sys/test_wait.rs index c2112bac7e..d8ac94e487 100644 --- a/test/sys/test_wait.rs +++ b/test/sys/test_wait.rs @@ -9,7 +9,7 @@ fn test_wait_signal() { match fork() { Ok(Child) => pause().unwrap_or(()), Ok(Parent { child }) => { - kill(child, SIGKILL).ok().expect("Error: Kill Failed"); + kill(child, Some(SIGKILL)).ok().expect("Error: Kill Failed"); assert_eq!(waitpid(child, None), Ok(WaitStatus::Signaled(child, SIGKILL, false))); }, // panic, fork should never fail unless there is a serious problem with the OS