Files
RedBear-OS/src/header/pty/redox.rs
T
2026-01-06 08:56:04 +00:00

32 lines
766 B
Rust

use crate::{
Pal, Sys,
error::ResultExt,
header::{fcntl, unistd},
platform::types::{c_char, c_int, ssize_t},
};
pub(super) unsafe fn openpty(name: &mut [u8]) -> Result<(c_int, c_int), ()> {
let master = fcntl::open(c"/scheme/pty".as_ptr(), fcntl::O_RDWR, 0);
if master < 0 {
return Err(());
}
// TODO: better error handling
let count = Sys::fpath(master, name)
.map(|u| u as ssize_t)
.or_minus_one_errno();
if count < 0 {
unistd::close(master);
return Err(());
}
name[count as usize] = 0;
let slave = fcntl::open(name.as_ptr() as *const c_char, fcntl::O_RDWR, 0);
if slave < 0 {
unistd::close(master);
return Err(());
}
Ok((master, slave))
}