diff --git a/src/event.rs b/src/event.rs index 642863f..f22f3fe 100644 --- a/src/event.rs +++ b/src/event.rs @@ -1,20 +1,20 @@ -use std::collections::BTreeMap; -use std::fs::File; -use std::io::{Read, Error, Result}; -use std::os::unix::io::RawFd; +use collections::{BTreeMap, Vec}; +use collections::boxed::Box; + +use ::Result; pub struct EventQueue { /// The file to read events from - file: File, + file: usize, /// A map of registered file descriptors to their handler callbacks - callbacks: BTreeMap Result>>> + callbacks: BTreeMap Result>>> } impl EventQueue { /// Create a new event queue pub fn new() -> Result> { Ok(EventQueue { - file: File::open("event:")?, + file: ::open("event:", ::O_RDONLY)?, callbacks: BTreeMap::new() }) } @@ -28,8 +28,8 @@ impl EventQueue { /// or Ok(Some(R)) to break the event loop and return the value. /// Err can be used to allow the callback to return an I/O error, and break the /// event loop - pub fn add Result> + 'static>(&mut self, fd: RawFd, callback: F) -> Result<()> { - ::fevent(fd, ::EVENT_READ).map_err(|x| Error::from_raw_os_error(x.errno))?; + pub fn add Result> + 'static>(&mut self, fd: usize, callback: F) -> Result<()> { + ::fevent(fd, ::EVENT_READ)?; self.callbacks.insert(fd, Box::new(callback)); @@ -37,9 +37,9 @@ impl EventQueue { } /// Remove a file from the event queue, returning its callback if found - pub fn remove(&mut self, fd: RawFd) -> Result Result>>>> { + pub fn remove(&mut self, fd: usize) -> Result Result>>>> { if let Some(callback) = self.callbacks.remove(&fd) { - ::fevent(fd, 0).map_err(|x| Error::from_raw_os_error(x.errno))?; + ::fevent(fd, 0)?; Ok(Some(callback)) } else { @@ -48,7 +48,7 @@ impl EventQueue { } /// Send an event to a descriptor callback - pub fn trigger(&mut self, fd: RawFd, count: usize) -> Result> { + pub fn trigger(&mut self, fd: usize, count: usize) -> Result> { if let Some(callback) = self.callbacks.get_mut(&fd) { callback(count) } else { @@ -71,7 +71,7 @@ impl EventQueue { pub fn run(&mut self) -> Result { loop { let mut event = ::Event::default(); - if self.file.read(&mut event)? > 0 { + if ::read(self.file, &mut event)? > 0 { if let Some(ret) = self.trigger(event.id, event.data)? { return Ok(ret); } diff --git a/src/io/dma.rs b/src/io/dma.rs index e2d1b91..200beae 100644 --- a/src/io/dma.rs +++ b/src/io/dma.rs @@ -1,5 +1,5 @@ -use std::{mem, ptr}; -use std::ops::{Deref, DerefMut}; +use core::{mem, ptr}; +use core::ops::{Deref, DerefMut}; use Result; diff --git a/src/lib.rs b/src/lib.rs index 127c04f..1006522 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,8 +1,12 @@ +#![deny(warnings)] #![feature(asm)] +#![feature(collections)] #![feature(const_fn)] #![feature(core_intrinsics)] #![no_std] +extern crate collections; + pub use self::arch::*; pub use self::call::*; pub use self::data::*;