From 43e95a9b9216e83c9c753a3ff3a8b16b9803413a Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy <mmstickman@gmail.com> Date: Sun, 25 Mar 2018 14:22:12 -0400 Subject: [PATCH] Implement kill() and killpg() --- src/platform/src/linux/mod.rs | 8 ++++++++ src/platform/src/redox/mod.rs | 8 ++++++++ src/signal/src/lib.rs | 4 ++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/platform/src/linux/mod.rs b/src/platform/src/linux/mod.rs index d055989d..b764d1f7 100644 --- a/src/platform/src/linux/mod.rs +++ b/src/platform/src/linux/mod.rs @@ -115,6 +115,14 @@ pub fn getuid() -> uid_t { e(unsafe { syscall!(GETUID) }) } +pub fn kill(pid: pid_t, sig: c_int) -> c_int { + e(unsafe { syscall!(KILL, pid, sig) }) as c_int +} + +pub fn killpg(pgrp: pid_t, sig: c_int) -> c_int { + e(unsafe { syscall!(KILL, -(pgrp as isize) as pid_t, sig) }) as c_int +} + pub fn link(path1: *const c_char, path2: *const c_char) -> c_int { e(unsafe { syscall!(LINKAT, AT_FDCWD, path1, AT_FDCWD, path2, 0) }) as c_int } diff --git a/src/platform/src/redox/mod.rs b/src/platform/src/redox/mod.rs index ea7954ec..4dfb2b28 100644 --- a/src/platform/src/redox/mod.rs +++ b/src/platform/src/redox/mod.rs @@ -119,6 +119,14 @@ pub fn getuid() -> uid_t { e(syscall::getuid()) as pid_t } +pub fn kill(pid: pid_t, sig: c_int) -> c_int { + e(syscall::kill(pid, sig as usize)) as c_int +} + +pub fn killpg(pgrp: pid_t, sig: c_int) -> c_int { + e(syscall::kill(-(pgrp as isize) as pid_t, sig as usize)) as c_int +} + pub fn link(path1: *const c_char, path2: *const c_char) -> c_int { let path1 = unsafe { c_str(path1) }; let path2 = unsafe { c_str(path2) }; diff --git a/src/signal/src/lib.rs b/src/signal/src/lib.rs index 052cb137..031b8e48 100644 --- a/src/signal/src/lib.rs +++ b/src/signal/src/lib.rs @@ -27,12 +27,12 @@ pub type sigset_t = sys_sigset_t; #[no_mangle] pub extern "C" fn kill(pid: pid_t, sig: c_int) -> c_int { - unimplemented!(); + platform::kill(pid, sig) } #[no_mangle] pub extern "C" fn killpg(pgrp: pid_t, sig: c_int) -> c_int { - unimplemented!(); + platform::killpg(pgrp, sig) } #[no_mangle] -- GitLab