summaryrefslogtreecommitdiff
path: root/src/sys/termios.rs
diff options
context:
space:
mode:
authorUtkarsh Kukreti <utkarshkukreti@gmail.com>2015-01-19 13:05:27 +0530
committerCarl Lerche <me@carllerche.com>2015-01-20 09:16:16 -0800
commitda900c6932254fa5e3b2a44b3ac9160fd275d261 (patch)
tree8efaed2d02478fedefee82364b29a290d6eaa5b0 /src/sys/termios.rs
parent4f9f68025e5f6d9e1d6cd5bfcecf0ec0ed4a7bcd (diff)
downloadnix-da900c6932254fa5e3b2a44b3ac9160fd275d261.zip
Make `tcgetattr` API more ergonomic.
Diffstat (limited to 'src/sys/termios.rs')
-rw-r--r--src/sys/termios.rs19
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,