Use unsafe blocks in pty.h implementation

This commit is contained in:
sourceturner
2026-01-18 21:10:03 +01:00
parent ac449a4338
commit 891eb61239
2 changed files with 61 additions and 45 deletions
+25 -16
View File
@@ -1,3 +1,6 @@
// TODO: set this for entire crate when possible
#![deny(unsafe_op_in_unsafe_fn)]
use crate::{
header::{fcntl, sys_ioctl, unistd},
io::{Cursor, Write},
@@ -6,28 +9,32 @@ use crate::{
pub(super) unsafe fn openpty(name: &mut [u8]) -> Result<(c_int, c_int), ()> {
//TODO: wrap in auto-close struct
let master = fcntl::open(c"/dev/ptmx".as_ptr(), fcntl::O_RDWR | fcntl::O_NOCTTY, 0);
let master = unsafe { fcntl::open(c"/dev/ptmx".as_ptr(), fcntl::O_RDWR | fcntl::O_NOCTTY, 0) };
if master < 0 {
return Err(());
}
let mut lock: c_int = 0;
if sys_ioctl::ioctl(
master,
sys_ioctl::TIOCSPTLCK,
&mut lock as *mut c_int as *mut c_void,
) != 0
if unsafe {
sys_ioctl::ioctl(
master,
sys_ioctl::TIOCSPTLCK,
&mut lock as *mut c_int as *mut c_void,
)
} != 0
{
unistd::close(master);
return Err(());
}
let mut ptn: c_int = 0;
if sys_ioctl::ioctl(
master,
sys_ioctl::TIOCGPTN,
&mut ptn as *mut c_int as *mut c_void,
) != 0
if unsafe {
sys_ioctl::ioctl(
master,
sys_ioctl::TIOCGPTN,
&mut ptn as *mut c_int as *mut c_void,
)
} != 0
{
unistd::close(master);
return Err(());
@@ -36,11 +43,13 @@ pub(super) unsafe fn openpty(name: &mut [u8]) -> Result<(c_int, c_int), ()> {
let mut cursor = Cursor::new(name);
write!(cursor, "/dev/pts/{}\0", ptn);
let slave = fcntl::open(
cursor.get_ref().as_ptr() as *const c_char,
fcntl::O_RDWR | fcntl::O_NOCTTY,
0,
);
let slave = unsafe {
fcntl::open(
cursor.get_ref().as_ptr() as *const c_char,
fcntl::O_RDWR | fcntl::O_NOCTTY,
0,
)
};
if slave < 0 {
unistd::close(master);
return Err(());