use syscall; use core::ops::Deref; pub struct RawFile(usize); impl RawFile { pub fn open>(path: T, flags: usize) -> syscall::Result { syscall::open(path, flags).map(RawFile) } pub fn dup(&self, buf: &[u8]) -> syscall::Result { syscall::dup(self.0, buf).map(RawFile) } } impl Drop for RawFile { fn drop(&mut self) { let _ = syscall::close(self.0); } } impl Deref for RawFile { type Target = usize; fn deref(&self) -> &usize { &self.0 } }