diff --git a/src/header/pwd/linux.rs b/src/header/pwd/linux.rs
new file mode 100644
index 0000000000000000000000000000000000000000..5080b5c852d663f0ae7c49866b6a5c7899dce1d1
--- /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 32029a747106b788d9e375fb868ee5f4a6b60e2d..e572ceb996dc63f4c1fc2900271c8edbdeae11ec 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 0000000000000000000000000000000000000000..c16314b00dcf9a679ff7f98b0b13cfaa1a8a3a73
--- /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
+}