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 +}