Files
RedBear-OS/src/header/pty/redox.rs
T
2026-02-10 16:29:37 +00:00

34 lines
809 B
Rust

use crate::{
error::ResultExt,
header::{fcntl, unistd},
platform::{
Pal, Sys,
types::{c_char, c_int, ssize_t},
},
};
pub(super) unsafe fn openpty(name: &mut [u8]) -> Result<(c_int, c_int), ()> {
let master = unsafe { 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 = unsafe { fcntl::open(name.as_ptr() as *const c_char, fcntl::O_RDWR, 0) };
if slave < 0 {
unistd::close(master);
return Err(());
}
Ok((master, slave))
}