use crate::fd::AsFd;
use crate::process::Pid;
use crate::{backend, io};
#[cfg(all(
linux_kernel,
any(
target_arch = "x86",
target_arch = "x86_64",
target_arch = "x32",
target_arch = "riscv64",
target_arch = "aarch64",
target_arch = "arm",
target_arch = "mips",
target_arch = "mips64",
)
))]
pub use backend::termios::types::Termios2;
pub use backend::termios::types::{
Action, OptionalActions, QueueSelector, Speed, Tcflag, Termios, Winsize,
};
#[cfg(not(any(windows, target_os = "wasi")))]
#[inline]
#[doc(alias = "TCGETS")]
pub fn tcgetattr<Fd: AsFd>(fd: Fd) -> io::Result<Termios> {
backend::termios::syscalls::tcgetattr(fd.as_fd())
}
#[inline]
#[doc(alias = "TCGETS2")]
#[cfg(all(
linux_kernel,
any(
target_arch = "x86",
target_arch = "x86_64",
target_arch = "x32",
target_arch = "riscv64",
target_arch = "aarch64",
target_arch = "arm",
target_arch = "mips",
target_arch = "mips64",
)
))]
pub fn tcgetattr2<Fd: AsFd>(fd: Fd) -> io::Result<Termios2> {
backend::termios::syscalls::tcgetattr2(fd.as_fd())
}
#[cfg(not(any(windows, target_os = "wasi")))]
#[inline]
#[doc(alias = "TIOCGWINSZ")]
pub fn tcgetwinsize<Fd: AsFd>(fd: Fd) -> io::Result<Winsize> {
backend::termios::syscalls::tcgetwinsize(fd.as_fd())
}
#[cfg(not(any(windows, target_os = "wasi")))]
#[inline]
#[doc(alias = "TIOCGPGRP")]
pub fn tcgetpgrp<Fd: AsFd>(fd: Fd) -> io::Result<Pid> {
backend::termios::syscalls::tcgetpgrp(fd.as_fd())
}
#[cfg(not(any(windows, target_os = "wasi")))]
#[inline]
#[doc(alias = "TIOCSPGRP")]
pub fn tcsetpgrp<Fd: AsFd>(fd: Fd, pid: Pid) -> io::Result<()> {
backend::termios::syscalls::tcsetpgrp(fd.as_fd(), pid)
}
#[inline]
#[doc(alias = "TCSETS")]
pub fn tcsetattr<Fd: AsFd>(
fd: Fd,
optional_actions: OptionalActions,
termios: &Termios,
) -> io::Result<()> {
backend::termios::syscalls::tcsetattr(fd.as_fd(), optional_actions, termios)
}
#[inline]
#[doc(alias = "TCSETS2")]
#[cfg(all(
linux_kernel,
any(
target_arch = "x86",
target_arch = "x86_64",
target_arch = "x32",
target_arch = "riscv64",
target_arch = "aarch64",
target_arch = "arm",
target_arch = "mips",
target_arch = "mips64",
)
))]
pub fn tcsetattr2<Fd: AsFd>(
fd: Fd,
optional_actions: OptionalActions,
termios: &Termios2,
) -> io::Result<()> {
backend::termios::syscalls::tcsetattr2(fd.as_fd(), optional_actions, termios)
}
#[inline]
#[doc(alias = "TCSBRK")]
pub fn tcsendbreak<Fd: AsFd>(fd: Fd) -> io::Result<()> {
backend::termios::syscalls::tcsendbreak(fd.as_fd())
}
#[inline]
pub fn tcdrain<Fd: AsFd>(fd: Fd) -> io::Result<()> {
backend::termios::syscalls::tcdrain(fd.as_fd())
}
#[inline]
#[doc(alias = "TCFLSH")]
pub fn tcflush<Fd: AsFd>(fd: Fd, queue_selector: QueueSelector) -> io::Result<()> {
backend::termios::syscalls::tcflush(fd.as_fd(), queue_selector)
}
#[inline]
#[doc(alias = "TCXONC")]
pub fn tcflow<Fd: AsFd>(fd: Fd, action: Action) -> io::Result<()> {
backend::termios::syscalls::tcflow(fd.as_fd(), action)
}
#[inline]
#[doc(alias = "TIOCGSID")]
pub fn tcgetsid<Fd: AsFd>(fd: Fd) -> io::Result<Pid> {
backend::termios::syscalls::tcgetsid(fd.as_fd())
}
#[inline]
#[doc(alias = "TIOCSWINSZ")]
pub fn tcsetwinsize<Fd: AsFd>(fd: Fd, winsize: Winsize) -> io::Result<()> {
backend::termios::syscalls::tcsetwinsize(fd.as_fd(), winsize)
}