From 7ca5fac214c75b3d6b3638b33ba3f22953e6c8fe Mon Sep 17 00:00:00 2001 From: stratact Date: Wed, 23 May 2018 08:00:53 -0700 Subject: [PATCH 1/8] Implement `RawFile::dup()` completely --- src/platform/src/rawfile.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/platform/src/rawfile.rs b/src/platform/src/rawfile.rs index d4ee4bee60..b4cf2b2e0d 100644 --- a/src/platform/src/rawfile.rs +++ b/src/platform/src/rawfile.rs @@ -1,20 +1,24 @@ use core::ops::Deref; +use sys::{open, dup, close}; pub struct RawFile(usize); impl RawFile { - pub fn open>(path: T, flags: usize) -> Result { + pub fn open>(path: T, flags: usize) -> Result { open(path, flags).map(RawFile) } - pub fn dup(&self, buf: &[u8]) -> Result { - dup(self.0, buf).map(RawFile) + pub fn dup(&self, _buf: &[u8]) -> Result { + match dup(self.0 as i32) { + 0 => Err(()), + n => Ok(RawFile(n as usize)) + } } } impl Drop for RawFile { fn drop(&mut self) { - let _ = close(self.0); + let _ = close(self.0 as i32); } } From 285d1b05c46585746c2abf9189c9cd3a252eed63 Mon Sep 17 00:00:00 2001 From: stratact Date: Wed, 23 May 2018 11:05:43 -0700 Subject: [PATCH 2/8] Implement `RawFile::open()` and add `*_raw_df()` convenience methods --- src/platform/src/rawfile.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/platform/src/rawfile.rs b/src/platform/src/rawfile.rs index b4cf2b2e0d..d1de83cdd1 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>(path: T, flags: usize) -> Result { - open(path, flags).map(RawFile) + pub fn open>(path: T, flags: usize, mode: usize) -> Result { + 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 { @@ -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 { From bb9d0e4aa1d74be17b6e8d2fdc0c5b6723e32c04 Mon Sep 17 00:00:00 2001 From: stratact Date: Wed, 23 May 2018 13:14:25 -0700 Subject: [PATCH 3/8] Implement `RawFile::from_raw_fd()` --- src/platform/src/rawfile.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/platform/src/rawfile.rs b/src/platform/src/rawfile.rs index d1de83cdd1..feb69cd6a3 100644 --- a/src/platform/src/rawfile.rs +++ b/src/platform/src/rawfile.rs @@ -25,6 +25,10 @@ impl RawFile { pub fn into_raw_fd(self) -> usize { self.0 } + + pub fn from_raw_fd(fd: usize) -> Self { + RawFile(fd) + } } impl Drop for RawFile { From 9daae71c2a9912f64946f207b560a33da9ac39ea Mon Sep 17 00:00:00 2001 From: stratact Date: Wed, 23 May 2018 19:35:28 -0700 Subject: [PATCH 4/8] Use the `super` module instead of `sys` --- src/platform/src/rawfile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/src/rawfile.rs b/src/platform/src/rawfile.rs index feb69cd6a3..05488a9705 100644 --- a/src/platform/src/rawfile.rs +++ b/src/platform/src/rawfile.rs @@ -1,5 +1,5 @@ use core::ops::Deref; -use sys::{open, dup, close}; +use super::{open, dup, close}; pub struct RawFile(usize); From b389e4831d1484c762a311435532a75c01497680 Mon Sep 17 00:00:00 2001 From: stratact Date: Thu, 24 May 2018 10:33:15 -0700 Subject: [PATCH 5/8] Have `open()` and `dup()` match `-1` for `Err` instead of `0` --- src/platform/src/rawfile.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/src/rawfile.rs b/src/platform/src/rawfile.rs index 05488a9705..17f06ae2ea 100644 --- a/src/platform/src/rawfile.rs +++ b/src/platform/src/rawfile.rs @@ -6,14 +6,14 @@ pub struct RawFile(usize); impl RawFile { pub fn open>(path: T, flags: usize, mode: usize) -> Result { match open(path.as_ref()[0] as *const i8, flags as i32, mode as u16) { - 0 => Err(()), + -1 => Err(()), n => Ok(RawFile(n as usize)) } } pub fn dup(&self, _buf: &[u8]) -> Result { match dup(self.0 as i32) { - 0 => Err(()), + -1 => Err(()), n => Ok(RawFile(n as usize)) } } From 16c51a297d4b53523d9776d3b0b7ae84459b0534 Mon Sep 17 00:00:00 2001 From: stratact Date: Thu, 24 May 2018 12:29:59 -0700 Subject: [PATCH 6/8] Use the right C types from `platform::types` --- src/platform/src/rawfile.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/platform/src/rawfile.rs b/src/platform/src/rawfile.rs index 17f06ae2ea..22200b0e0f 100644 --- a/src/platform/src/rawfile.rs +++ b/src/platform/src/rawfile.rs @@ -1,32 +1,37 @@ use core::ops::Deref; -use super::{open, dup, close}; +use super::{open, dup, close, types::*}; -pub struct RawFile(usize); +trait Into { + into(self) -> c_char; +} + + +pub struct RawFile(c_int); impl RawFile { - pub fn open>(path: T, flags: usize, mode: usize) -> Result { - match open(path.as_ref()[0] as *const i8, flags as i32, mode as u16) { + pub fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> Result { + match open(path, oflag, mode) { -1 => Err(()), - n => Ok(RawFile(n as usize)) + n => Ok(RawFile(n)) } } pub fn dup(&self, _buf: &[u8]) -> Result { - match dup(self.0 as i32) { + match dup(self.0) { -1 => Err(()), - n => Ok(RawFile(n as usize)) + n => Ok(RawFile(n)) } } - pub fn as_raw_fd(&self) -> usize { + pub fn as_raw_fd(&self) -> c_int { self.0 } - pub fn into_raw_fd(self) -> usize { + pub fn into_raw_fd(self) -> c_int { self.0 } - pub fn from_raw_fd(fd: usize) -> Self { + pub fn from_raw_fd(fd: c_int) -> Self { RawFile(fd) } } From a7a415603f95c4cf060afdce1b1883ef606db5ee Mon Sep 17 00:00:00 2001 From: stratact Date: Thu, 24 May 2018 13:04:58 -0700 Subject: [PATCH 7/8] Fix stupid mistake --- src/platform/src/rawfile.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/platform/src/rawfile.rs b/src/platform/src/rawfile.rs index 22200b0e0f..7746a1b425 100644 --- a/src/platform/src/rawfile.rs +++ b/src/platform/src/rawfile.rs @@ -1,11 +1,6 @@ use core::ops::Deref; use super::{open, dup, close, types::*}; -trait Into { - into(self) -> c_char; -} - - pub struct RawFile(c_int); impl RawFile { From 3aa01b690794359d962cf60f31d5a8639afe95a3 Mon Sep 17 00:00:00 2001 From: stratact Date: Thu, 24 May 2018 13:27:24 -0700 Subject: [PATCH 8/8] Remove pointless cast --- src/platform/src/rawfile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/src/rawfile.rs b/src/platform/src/rawfile.rs index 7746a1b425..e19be0b829 100644 --- a/src/platform/src/rawfile.rs +++ b/src/platform/src/rawfile.rs @@ -33,7 +33,7 @@ impl RawFile { impl Drop for RawFile { fn drop(&mut self) { - let _ = close(self.0 as i32); + let _ = close(self.0); } }