use core::ffi::c_uint;
use super::mips_fstat;
use crate::{
fd::{BorrowedFd, OwnedFd, RawFd},
io,
};
const STDIN_FILENO: RawFd = 0; const STDOUT_FILENO: RawFd = 1; const STDERR_FILENO: RawFd = 2;
pub(crate) type StdioFd = BorrowedFd<'static>;
pub(crate) fn stdin() -> io::Result<StdioFd> {
Ok(unsafe { BorrowedFd::borrow_raw(STDIN_FILENO) })
}
pub(crate) fn stdout() -> io::Result<StdioFd> {
Ok(unsafe { BorrowedFd::borrow_raw(STDOUT_FILENO) })
}
pub(crate) fn stderr() -> io::Result<StdioFd> {
Ok(unsafe { BorrowedFd::borrow_raw(STDERR_FILENO) })
}
#[inline]
#[allow(clippy::cast_sign_loss)]
pub(crate) fn should_close(fd: &OwnedFd) -> bool {
fd.as_raw_fd() as c_uint > STDERR_FILENO as c_uint
}
pub(crate) fn is_terminal(fd: BorrowedFd<'_>) -> bool {
const S_IFCHR: u32 = 0x2000;
matches!(mips_fstat(fd), Ok(stat) if stat.st_mode & S_IFCHR != 0)
}