Add (backend todo) proc calls for kill+sigq.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use core::{slice, str};
|
||||
|
||||
use redox_rt::{
|
||||
protocol::WaitFlags,
|
||||
protocol::{KillTarget, WaitFlags},
|
||||
sys::{posix_read, posix_write, WaitpidTarget},
|
||||
};
|
||||
use syscall::{Error, Result, EMFILE};
|
||||
@@ -259,7 +259,7 @@ pub unsafe extern "C" fn redox_waitpid_v1(pid: usize, status: *mut i32, options:
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn redox_kill_v1(pid: usize, signal: u32) -> RawResult {
|
||||
Error::mux(redox_rt::sys::posix_kill(pid, signal as usize).map(|()| 0))
|
||||
Error::mux(redox_rt::sys::posix_kill(KillTarget::from_raw(pid), signal as usize).map(|()| 0))
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
||||
@@ -839,7 +839,8 @@ impl Pal for Sys {
|
||||
}
|
||||
|
||||
fn setpgid(pid: pid_t, pgid: pid_t) -> Result<()> {
|
||||
Ok(redox_rt::sys::posix_setpgid(pid as usize, pgid as usize)?)
|
||||
redox_rt::sys::posix_setpgid(pid as usize, pgid as usize)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn setpriority(which: c_int, who: id_t, prio: c_int) -> Result<()> {
|
||||
@@ -852,37 +853,32 @@ impl Pal for Sys {
|
||||
}
|
||||
|
||||
fn setsid() -> Result<()> {
|
||||
let session_id = Self::getpid();
|
||||
assert!(session_id >= 0);
|
||||
let mut file = File::open(
|
||||
c"/scheme/thisproc/current/session_id".into(),
|
||||
fcntl::O_WRONLY | fcntl::O_CLOEXEC,
|
||||
)?;
|
||||
file.write(&usize::to_ne_bytes(session_id.try_into().unwrap()))
|
||||
.map_err(|err| Errno(err.raw_os_error().unwrap_or(EIO)))?;
|
||||
redox_rt::sys::posix_setsid()?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn setresgid(rgid: gid_t, egid: gid_t, sgid: gid_t) -> Result<()> {
|
||||
Ok(redox_rt::sys::posix_setresugid(
|
||||
redox_rt::sys::posix_setresugid(
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
cvt_uid(rgid)?,
|
||||
cvt_uid(egid)?,
|
||||
cvt_uid(sgid)?,
|
||||
)?)
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn setresuid(ruid: uid_t, euid: uid_t, suid: uid_t) -> Result<()> {
|
||||
Ok(redox_rt::sys::posix_setresugid(
|
||||
redox_rt::sys::posix_setresugid(
|
||||
cvt_uid(ruid)?,
|
||||
cvt_uid(euid)?,
|
||||
cvt_uid(suid)?,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
)?)
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn symlink(path1: CStr, path2: CStr) -> Result<()> {
|
||||
|
||||
@@ -18,6 +18,7 @@ use crate::{
|
||||
use core::mem::{self, offset_of};
|
||||
use redox_rt::{
|
||||
proc::FdGuard,
|
||||
protocol::KillTarget,
|
||||
signal::{
|
||||
PosixStackt, SigStack, Sigaction, SigactionFlags, SigactionKind, Sigaltstack, SignalHandler,
|
||||
},
|
||||
@@ -65,7 +66,7 @@ impl PalSignal for Sys {
|
||||
}
|
||||
|
||||
fn kill(pid: pid_t, sig: c_int) -> Result<()> {
|
||||
redox_rt::sys::posix_kill(pid as usize, sig as usize)?;
|
||||
redox_rt::sys::posix_kill(KillTarget::from_raw(pid as usize), sig as usize)?;
|
||||
Ok(())
|
||||
}
|
||||
fn sigqueue(pid: pid_t, sig: c_int, val: sigval) -> Result<()> {
|
||||
@@ -77,8 +78,10 @@ impl PalSignal for Sys {
|
||||
}
|
||||
|
||||
fn killpg(pgrp: pid_t, sig: c_int) -> Result<()> {
|
||||
redox_rt::sys::posix_killpg(pgrp as usize, sig as usize)?;
|
||||
Ok(())
|
||||
if pgrp == 1 {
|
||||
return Err(Errno(EINVAL));
|
||||
}
|
||||
Self::kill(-pgrp, sig)
|
||||
}
|
||||
|
||||
fn raise(sig: c_int) -> Result<()> {
|
||||
|
||||
Reference in New Issue
Block a user