Merge branch 'pty_fixes' into 'main'

Use libredox for kill and reduce unsafe

See merge request redox-os/base!10
This commit is contained in:
Jeremy Soller
2025-04-18 12:35:23 +00:00
2 changed files with 13 additions and 27 deletions
+10 -24
View File
@@ -43,19 +43,12 @@ impl Resource for PtyPgrp {
fn read(&mut self, buf: &mut [u8]) -> Result<Option<usize>> {
if let Some(pty_lock) = self.pty.upgrade() {
let pty = pty_lock.borrow();
let pgrp: &[u8] = unsafe {
slice::from_raw_parts(
&pty.pgrp as *const usize as *const u8,
mem::size_of::<usize>(),
)
};
let mut i = 0;
while i < buf.len() && i < pgrp.len() {
buf[i] = pgrp[i];
i += 1;
}
Ok(Some(i))
//println!("READ PGRP {}: {}", pty.id, pty.pgrp);
let dst_buf = buf.get_mut(..4).and_then(|b| <&mut [u8; 4]>::try_from(b).ok()).ok_or(Error::new(EBADF))?;
*dst_buf = (pty.pgrp as u32).to_ne_bytes();
Ok(Some(4))
} else {
Ok(Some(0))
}
@@ -64,19 +57,12 @@ impl Resource for PtyPgrp {
fn write(&mut self, buf: &[u8]) -> Result<Option<usize>> {
if let Some(pty_lock) = self.pty.upgrade() {
let mut pty = pty_lock.borrow_mut();
let pgrp: &mut [u8] = unsafe {
slice::from_raw_parts_mut(
&mut pty.pgrp as *mut usize as *mut u8,
mem::size_of::<usize>(),
)
};
let mut i = 0;
while i < buf.len() && i < pgrp.len() {
pgrp[i] = buf[i];
i += 1;
}
Ok(Some(i))
let new_pgrp = u32::from_ne_bytes(buf.get(..4).and_then(|b| <[u8; 4]>::try_from(b).ok()).ok_or(Error::new(EBADF))?);
pty.pgrp = new_pgrp as usize;
//println!("WRITE PGRP {}: {} => {}", pty.id, pty.pgrp, new_pgrp);
Ok(Some(4))
} else {
Err(Error::new(EPIPE))
}
+3 -3
View File
@@ -155,7 +155,7 @@ impl Pty {
if isig {
if is_cc(b, VINTR) {
if self.pgrp != 0 {
let _ = syscall::kill(-(self.pgrp as isize) as usize, syscall::SIGINT);
let _ = libredox::call::kill(-(self.pgrp as isize) as usize, libredox::flag::SIGINT as _);
}
b = 0;
@@ -163,7 +163,7 @@ impl Pty {
if is_cc(b, VQUIT) {
if self.pgrp != 0 {
let _ = syscall::kill(-(self.pgrp as isize) as usize, syscall::SIGQUIT);
let _ = libredox::call::kill(-(self.pgrp as isize) as usize, libredox::flag::SIGQUIT as _);
}
b = 0;
@@ -171,7 +171,7 @@ impl Pty {
if is_cc(b, VSUSP) {
if self.pgrp != 0 {
let _ = syscall::kill(-(self.pgrp as isize) as usize, syscall::SIGTSTP);
let _ = libredox::call::kill(-(self.pgrp as isize) as usize, libredox::flag::SIGTSTP as _);
}
b = 0;