diff --git a/src/platform/src/rawfile.rs b/src/platform/src/rawfile.rs index d4ee4bee60b820c45edb7459ab55be0a22292de4..e19be0b8296bb6560c859cc767ffc70ce77ac27a 100644 --- a/src/platform/src/rawfile.rs +++ b/src/platform/src/rawfile.rs @@ -1,14 +1,33 @@ use core::ops::Deref; +use super::{open, dup, close, types::*}; -pub struct RawFile(usize); +pub struct RawFile(c_int); impl RawFile { - pub fn open<T: AsRef<[u8]>>(path: T, flags: usize) -> Result<RawFile> { - open(path, flags).map(RawFile) + pub fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> Result<RawFile, ()> { + match open(path, oflag, mode) { + -1 => Err(()), + n => Ok(RawFile(n)) + } } - pub fn dup(&self, buf: &[u8]) -> Result<RawFile> { - dup(self.0, buf).map(RawFile) + pub fn dup(&self, _buf: &[u8]) -> Result<RawFile, ()> { + match dup(self.0) { + -1 => Err(()), + n => Ok(RawFile(n)) + } + } + + pub fn as_raw_fd(&self) -> c_int { + self.0 + } + + pub fn into_raw_fd(self) -> c_int { + self.0 + } + + pub fn from_raw_fd(fd: c_int) -> Self { + RawFile(fd) } }