diff --git a/src/platform/src/rawfile.rs b/src/platform/src/rawfile.rs
index b4cf2b2e0d202c078eb226ce47e4817dabea6450..d1de83cdd1ac4416e2d22dd192ff370791f70baf 100644
--- a/src/platform/src/rawfile.rs
+++ b/src/platform/src/rawfile.rs
@@ -4,8 +4,11 @@ use sys::{open, dup, close};
 pub struct RawFile(usize);
 
 impl RawFile {
-    pub fn open<T: AsRef<[u8]>>(path: T, flags: usize) -> Result<RawFile, ()> {
-        open(path, flags).map(RawFile)
+    pub fn open<T: AsRef<[u8]>>(path: T, flags: usize, mode: usize) -> Result<RawFile, ()> {
+        match open(path.as_ref()[0] as *const i8, flags as i32, mode as u16) {
+            0 => Err(()),
+            n => Ok(RawFile(n as usize))
+        }
     }
 
     pub fn dup(&self, _buf: &[u8]) -> Result<RawFile, ()> {
@@ -14,6 +17,14 @@ impl RawFile {
             n => Ok(RawFile(n as usize))
         }
     }
+
+    pub fn as_raw_fd(&self) -> usize {
+        self.0
+    }
+
+    pub fn into_raw_fd(self) -> usize {
+        self.0
+    }
 }
 
 impl Drop for RawFile {