From 9e9b850b903ce415432d5ad780724c67f5b5d4bd Mon Sep 17 00:00:00 2001
From: jD91mZM2 <me@krake.one>
Date: Fri, 21 Sep 2018 08:03:51 +0200
Subject: [PATCH] Untested fix for pwd.h on redox

---
 src/header/pwd/linux.rs |  7 +++++++
 src/header/pwd/mod.rs   | 14 +++++++-------
 src/header/pwd/redox.rs | 15 +++++++++++++++
 3 files changed, 29 insertions(+), 7 deletions(-)
 create mode 100644 src/header/pwd/linux.rs
 create mode 100644 src/header/pwd/redox.rs

diff --git a/src/header/pwd/linux.rs b/src/header/pwd/linux.rs
new file mode 100644
index 000000000..5080b5c85
--- /dev/null
+++ b/src/header/pwd/linux.rs
@@ -0,0 +1,7 @@
+pub fn split(line: &[u8]) -> [&[u8]; 7] {
+    let mut parts: [&[u8]; 7] = [&[]; 7];
+    for (i, part) in line.splitn(7, |b| *b == b':').enumerate() {
+        parts[i] = part;
+    }
+    parts
+}
diff --git a/src/header/pwd/mod.rs b/src/header/pwd/mod.rs
index 32029a747..e572ceb99 100644
--- a/src/header/pwd/mod.rs
+++ b/src/header/pwd/mod.rs
@@ -6,9 +6,14 @@ use c_str::CStr;
 use header::{errno, fcntl};
 use platform;
 use platform::types::*;
-use platform::Sys;
 use platform::{Line, RawFile, RawLineBuffer};
 
+#[cfg(target_os = "linux")] mod linux;
+#[cfg(target_os = "redox")] mod redox;
+
+#[cfg(target_os = "linux")] use self::linux as sys;
+#[cfg(target_os = "redox")] use self::redox as sys;
+
 #[repr(C)]
 pub struct passwd {
     pw_name: *mut c_char,
@@ -65,14 +70,9 @@ where
         };
 
         // Parse into passwd
-        let mut parts: [&[u8]; 7] = [&[]; 7];
-        for (i, part) in line.splitn(7, |b| *b == b':').enumerate() {
-            parts[i] = part;
-        }
+        let mut parts: [&[u8]; 7] = sys::split(line);
 
         if !callback(&parts) {
-            // TODO when nll becomes a thing:
-            // buf.drain(..newline + 1);
             continue;
         }
 
diff --git a/src/header/pwd/redox.rs b/src/header/pwd/redox.rs
new file mode 100644
index 000000000..c16314b00
--- /dev/null
+++ b/src/header/pwd/redox.rs
@@ -0,0 +1,15 @@
+pub fn split(line: &[u8]) -> [&[u8]; 7] {
+    let mut parts: [&[u8]; 7] = [&[]; 7];
+    let mut iter = line.split(|b| *b == b';');
+
+    parts[0] = iter.next().unwrap_or(&[]);
+    // Skip passwd
+    for i in 0..2 {
+        parts[2+i] = iter.next().unwrap_or(&[]);
+    }
+    // Skip gecos
+    for i in 0..2 {
+        parts[5+i] = iter.next().unwrap_or(&[]);
+    }
+    parts
+}
-- 
GitLab