use std::os::fd::{FromRawFd, OwnedFd};
pub struct PtyPair {
pub master: OwnedFd,
pub slave: OwnedFd,
}
pub fn openpty() -> std::io::Result<PtyPair> {
let mut master_fd: libc::c_int = -1;
let mut slave_fd: libc::c_int = -1;
let ret = unsafe {
libc::openpty(
&mut master_fd,
&mut slave_fd,
std::ptr::null_mut(),
std::ptr::null_mut(),
std::ptr::null_mut(),
)
};
if ret < 0 {
return Err(std::io::Error::last_os_error());
}
Ok(PtyPair {
master: unsafe { OwnedFd::from_raw_fd(master_fd) },
slave: unsafe { OwnedFd::from_raw_fd(slave_fd) },
})
}