Update to new fevent

This commit is contained in:
Jeremy Soller
2019-03-13 14:08:44 -06:00
parent d9b9c7158d
commit 2ef4408a7a
8 changed files with 43 additions and 55 deletions
+3 -5
View File
@@ -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);
}
}
}
+14 -13
View File
@@ -98,29 +98,30 @@ impl Resource for PtyMaster {
}
}
fn fevent(&mut self) -> Result<()> {
fn fevent(&mut self) -> Result<usize> {
self.notified_read = false; // resend
self.notified_write = false;
Ok(())
Ok(self.events())
}
fn fevent_count(&mut self) -> Option<usize> {
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
}
}
+3 -6
View File
@@ -102,14 +102,11 @@ impl Resource for PtyPgrp {
}
}
fn fevent(&mut self) -> Result<()> {
fn fevent(&mut self) -> Result<usize> {
Err(Error::new(EBADF))
}
fn fevent_count(&mut self) -> Option<usize> {
None
}
fn fevent_writable(&mut self) -> bool {
false
fn events(&mut self) -> usize {
0
}
}
+2 -3
View File
@@ -15,7 +15,6 @@ pub trait Resource {
fn write(&self, buf: &[u8]) -> Result<Option<usize>>;
fn sync(&self) -> Result<usize>;
fn fcntl(&mut self, cmd: usize, arg: usize) -> Result<usize>;
fn fevent(&mut self) -> Result<()>;
fn fevent_count(&mut self) -> Option<usize>;
fn fevent_writable(&mut self) -> bool;
fn fevent(&mut self) -> Result<usize>;
fn events(&mut self) -> usize;
}
+1 -1
View File
@@ -99,7 +99,7 @@ impl SchemeBlockMut for PtyScheme {
fn fevent(&mut self, id: usize, _flags: usize) -> Result<Option<usize>> {
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<Option<usize>> {
+14 -15
View File
@@ -114,33 +114,32 @@ impl Resource for PtySlave {
}
}
fn fevent(&mut self) -> Result<()> {
fn fevent(&mut self) -> Result<usize> {
self.notified_read = false; // resend
self.notified_write = false;
Ok(())
Ok(self.events())
}
fn fevent_count(&mut self) -> Option<usize> {
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
}
}
+3 -6
View File
@@ -92,14 +92,11 @@ impl Resource for PtyTermios {
}
}
fn fevent(&mut self) -> Result<()> {
fn fevent(&mut self) -> Result<usize> {
Err(Error::new(EBADF))
}
fn fevent_count(&mut self) -> Option<usize> {
None
}
fn fevent_writable(&mut self) -> bool {
false
fn events(&mut self) -> usize {
0
}
}
+3 -6
View File
@@ -92,14 +92,11 @@ impl Resource for PtyWinsize {
}
}
fn fevent(&mut self) -> Result<()> {
fn fevent(&mut self) -> Result<usize> {
Err(Error::new(EBADF))
}
fn fevent_count(&mut self) -> Option<usize> {
None
}
fn fevent_writable(&mut self) -> bool {
false
fn events(&mut self) -> usize {
0
}
}