Make signal argument to kill optional

This commit is contained in:
Philipp Matthias Schaefer 2016-10-24 21:03:30 +02:00
parent a9f630ed00
commit 45d8beea46
5 changed files with 21 additions and 3 deletions

View File

@ -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<Option<Signal>>`. `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`

View File

@ -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<T: Into<Option<Signal>>>(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)
}

View File

@ -1,3 +1,4 @@
mod test_signal;
mod test_socket;
mod test_sockopt;
mod test_termios;

7
test/sys/test_signal.rs Normal file
View File

@ -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.");
}

View File

@ -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