diff options
author | Utkarsh Kukreti <utkarshkukreti@gmail.com> | 2015-01-19 13:05:27 +0530 |
---|---|---|
committer | Carl Lerche <me@carllerche.com> | 2015-01-20 09:16:16 -0800 |
commit | da900c6932254fa5e3b2a44b3ac9160fd275d261 (patch) | |
tree | 8efaed2d02478fedefee82364b29a290d6eaa5b0 /src/sys/termios.rs | |
parent | 4f9f68025e5f6d9e1d6cd5bfcecf0ec0ed4a7bcd (diff) | |
download | nix-da900c6932254fa5e3b2a44b3ac9160fd275d261.zip |
Make `tcgetattr` API more ergonomic.
Diffstat (limited to 'src/sys/termios.rs')
-rw-r--r-- | src/sys/termios.rs | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/sys/termios.rs b/src/sys/termios.rs index 1739aa5c..525a13ff 100644 --- a/src/sys/termios.rs +++ b/src/sys/termios.rs @@ -1,6 +1,7 @@ -use errno::{SysResult, from_ffi}; +use errno::{SysError, SysResult, from_ffi}; use fcntl::Fd; use libc::c_int; +use std::mem; pub use self::ffi::consts::*; pub use self::ffi::consts::SetArg::*; @@ -372,10 +373,18 @@ pub fn cfsetospeed(termios: &mut Termios, speed: speed_t) -> SysResult<()> { }) } -pub fn tcgetattr(fd: Fd, termios: &mut Termios) -> SysResult<()> { - from_ffi(unsafe { - ffi::tcgetattr(fd, termios) - }) +pub fn tcgetattr(fd: Fd) -> SysResult<Termios> { + let mut termios = unsafe { mem::uninitialized() }; + + let res = unsafe { + ffi::tcgetattr(fd, &mut termios) + }; + + if res < 0 { + return Err(SysError::last()); + } + + Ok(termios) } pub fn tcsetattr(fd: Fd, |