1 use std::{io, mem};
2 
3 use super::{cvt, Termios};
4 use super::libc::c_int;
5 
get_terminal_attr() -> io::Result<Termios>6 pub fn get_terminal_attr() -> io::Result<Termios> {
7     extern "C" {
8         pub fn tcgetattr(fd: c_int, termptr: *mut Termios) -> c_int;
9     }
10     unsafe {
11         let mut termios = mem::zeroed();
12         cvt(tcgetattr(1, &mut termios))?;
13         Ok(termios)
14     }
15 }
16 
set_terminal_attr(termios: &Termios) -> io::Result<()>17 pub fn set_terminal_attr(termios: &Termios) -> io::Result<()> {
18     extern "C" {
19         pub fn tcsetattr(fd: c_int, opt: c_int, termptr: *const Termios) -> c_int;
20     }
21     cvt(unsafe { tcsetattr(1, 0, termios) }).and(Ok(()))
22 }
23 
raw_terminal_attr(termios: &mut Termios)24 pub fn raw_terminal_attr(termios: &mut Termios) {
25     extern "C" {
26         pub fn cfmakeraw(termptr: *mut Termios);
27     }
28     unsafe { cfmakeraw(termios) }
29 }
30