Use libc bindings instead of manual extern blocks to take advantage of platform wrappers in libc crate.
This commit is contained in:
parent
e2f8451008
commit
234af89ffb
|
@ -1,29 +1,19 @@
|
||||||
use std::{io, mem};
|
use std::{io, mem};
|
||||||
|
|
||||||
use super::{cvt, Termios};
|
use super::{cvt, Termios};
|
||||||
use super::libc::c_int;
|
|
||||||
|
|
||||||
pub fn get_terminal_attr() -> io::Result<Termios> {
|
pub fn get_terminal_attr() -> io::Result<Termios> {
|
||||||
extern "C" {
|
|
||||||
pub fn tcgetattr(fd: c_int, termptr: *mut Termios) -> c_int;
|
|
||||||
}
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let mut termios = mem::zeroed();
|
let mut termios = mem::zeroed();
|
||||||
cvt(tcgetattr(1, &mut termios))?;
|
cvt(libc::tcgetattr(1, &mut termios))?;
|
||||||
Ok(termios)
|
Ok(termios)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_terminal_attr(termios: &Termios) -> io::Result<()> {
|
pub fn set_terminal_attr(termios: &Termios) -> io::Result<()> {
|
||||||
extern "C" {
|
cvt(unsafe { libc::tcsetattr(1, 0, termios) }).and(Ok(()))
|
||||||
pub fn tcsetattr(fd: c_int, opt: c_int, termptr: *const Termios) -> c_int;
|
|
||||||
}
|
|
||||||
cvt(unsafe { tcsetattr(1, 0, termios) }).and(Ok(()))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn raw_terminal_attr(termios: &mut Termios) {
|
pub fn raw_terminal_attr(termios: &mut Termios) {
|
||||||
extern "C" {
|
unsafe { libc::cfmakeraw(termios) }
|
||||||
pub fn cfmakeraw(termptr: *mut Termios);
|
|
||||||
}
|
|
||||||
unsafe { cfmakeraw(termios) }
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue