1 use std::{io, mem}; 2 3 use super::{cvt, Termios}; 4 use super::libc::c_int; 5 get_terminal_attr() -> io::Result<Termios>6pub 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<()>17pub 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)24pub fn raw_terminal_attr(termios: &mut Termios) { 25 extern "C" { 26 pub fn cfmakeraw(termptr: *mut Termios); 27 } 28 unsafe { cfmakeraw(termios) } 29 } 30