From 2ef4408a7aa9fb2b2c47b37760a52caefae66321 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Wed, 13 Mar 2019 14:08:44 -0600 Subject: [PATCH] Update to new fevent --- src/main.rs | 8 +++----- src/master.rs | 27 ++++++++++++++------------- src/pgrp.rs | 9 +++------ src/resource.rs | 5 ++--- src/scheme.rs | 2 +- src/slave.rs | 29 ++++++++++++++--------------- src/termios.rs | 9 +++------ src/winsize.rs | 9 +++------ 8 files changed, 43 insertions(+), 55 deletions(-) diff --git a/src/main.rs b/src/main.rs index b18f4e2012..dabd6c5d06 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,11 +52,9 @@ fn main(){ } for (id, handle) in scheme.handles.iter_mut() { - if let Some(count) = handle.fevent_count() { - post_fevent(&mut socket, *id, syscall::EVENT_READ, count); - } - if handle.fevent_writable() { - post_fevent(&mut socket, *id, syscall::EVENT_WRITE, 1); + let events = handle.events(); + if events > 0 { + post_fevent(&mut socket, *id, events, 1); } } } diff --git a/src/master.rs b/src/master.rs index 1b9650b4d1..19b0545e2f 100644 --- a/src/master.rs +++ b/src/master.rs @@ -98,29 +98,30 @@ impl Resource for PtyMaster { } } - fn fevent(&mut self) -> Result<()> { + fn fevent(&mut self) -> Result { self.notified_read = false; // resend self.notified_write = false; - Ok(()) + Ok(self.events()) } - fn fevent_count(&mut self) -> Option { + fn events(&mut self) -> usize { + let mut events = 0; + let pty = self.pty.borrow(); - if let Some(data) = pty.miso.front() { + if pty.miso.front().is_some() { if !self.notified_read { self.notified_read = true; - Some(data.len()) - } else { - None + events |= syscall::EVENT_READ; } } else { self.notified_read = false; - None } - } - fn fevent_writable(&mut self) -> bool { - let notified = self.notified_write; - self.notified_write = true; - !notified + + if ! self.notified_write { + self.notified_write = true; + events |= syscall::EVENT_WRITE; + } + + events } } diff --git a/src/pgrp.rs b/src/pgrp.rs index 5ffc39089b..df9f96b60e 100644 --- a/src/pgrp.rs +++ b/src/pgrp.rs @@ -102,14 +102,11 @@ impl Resource for PtyPgrp { } } - fn fevent(&mut self) -> Result<()> { + fn fevent(&mut self) -> Result { Err(Error::new(EBADF)) } - fn fevent_count(&mut self) -> Option { - None - } - fn fevent_writable(&mut self) -> bool { - false + fn events(&mut self) -> usize { + 0 } } diff --git a/src/resource.rs b/src/resource.rs index 2ad8a7912c..ded96d56be 100644 --- a/src/resource.rs +++ b/src/resource.rs @@ -15,7 +15,6 @@ pub trait Resource { fn write(&self, buf: &[u8]) -> Result>; fn sync(&self) -> Result; fn fcntl(&mut self, cmd: usize, arg: usize) -> Result; - fn fevent(&mut self) -> Result<()>; - fn fevent_count(&mut self) -> Option; - fn fevent_writable(&mut self) -> bool; + fn fevent(&mut self) -> Result; + fn events(&mut self) -> usize; } diff --git a/src/scheme.rs b/src/scheme.rs index f21c73f217..43dcf6abf6 100644 --- a/src/scheme.rs +++ b/src/scheme.rs @@ -99,7 +99,7 @@ impl SchemeBlockMut for PtyScheme { fn fevent(&mut self, id: usize, _flags: usize) -> Result> { let handle = self.handles.get_mut(&id).ok_or(Error::new(EBADF))?; - handle.fevent().and(Ok(Some(id))) + handle.fevent().map(Some) } fn fpath(&mut self, id: usize, buf: &mut [u8]) -> Result> { diff --git a/src/slave.rs b/src/slave.rs index d4ca783147..f6dc6fe7a5 100644 --- a/src/slave.rs +++ b/src/slave.rs @@ -114,33 +114,32 @@ impl Resource for PtySlave { } } - fn fevent(&mut self) -> Result<()> { + fn fevent(&mut self) -> Result { self.notified_read = false; // resend self.notified_write = false; - Ok(()) + Ok(self.events()) } - fn fevent_count(&mut self) -> Option { + fn events(&mut self) -> usize { + let mut events = 0; + if let Some(pty_lock) = self.pty.upgrade() { let pty = pty_lock.borrow(); - if let Some(data) = pty.mosi.front() { + if pty.mosi.front().is_some() { if !self.notified_read { self.notified_read = true; - Some(data.len()) - } else { - None + events |= syscall::EVENT_READ; } } else { self.notified_read = false; - None } - } else { - Some(0) } - } - fn fevent_writable(&mut self) -> bool { - let notified = self.notified_write; - self.notified_write = true; - !notified + + if ! self.notified_write { + self.notified_write = true; + events |= syscall::EVENT_WRITE; + } + + events } } diff --git a/src/termios.rs b/src/termios.rs index 13f98c81a9..807e09206e 100644 --- a/src/termios.rs +++ b/src/termios.rs @@ -92,14 +92,11 @@ impl Resource for PtyTermios { } } - fn fevent(&mut self) -> Result<()> { + fn fevent(&mut self) -> Result { Err(Error::new(EBADF)) } - fn fevent_count(&mut self) -> Option { - None - } - fn fevent_writable(&mut self) -> bool { - false + fn events(&mut self) -> usize { + 0 } } diff --git a/src/winsize.rs b/src/winsize.rs index 615861394b..2c34584e62 100644 --- a/src/winsize.rs +++ b/src/winsize.rs @@ -92,14 +92,11 @@ impl Resource for PtyWinsize { } } - fn fevent(&mut self) -> Result<()> { + fn fevent(&mut self) -> Result { Err(Error::new(EBADF)) } - fn fevent_count(&mut self) -> Option { - None - } - fn fevent_writable(&mut self) -> bool { - false + fn events(&mut self) -> usize { + 0 } }