Add (backend todo) proc calls for kill+sigq.

This commit is contained in:
4lDO2
2025-03-30 01:13:18 +01:00
parent f4a64cfbc3
commit 88848c25fe
5 changed files with 93 additions and 39 deletions
+2 -2
View File
@@ -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]
+9 -13
View File
@@ -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<()> {
+6 -3
View File
@@ -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<()> {