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