diff --git a/src/libstd/ffi/c_str.rs b/src/libstd/ffi/c_str.rs index 318ff410cba..3f3913471b8 100644 --- a/src/libstd/ffi/c_str.rs +++ b/src/libstd/ffi/c_str.rs @@ -19,6 +19,7 @@ use io; use iter::Iterator; use libc; use mem; +use memchr; use ops::Deref; use option::Option::{self, Some, None}; use os::raw::c_char; @@ -188,7 +189,7 @@ impl CString { } fn _new(bytes: Vec) -> Result { - match bytes.iter().position(|x| *x == 0) { + match memchr::memchr(0, &bytes) { Some(i) => Err(NulError(i, bytes)), None => Ok(unsafe { CString::from_vec_unchecked(bytes) }), } diff --git a/src/libstd/io/buffered.rs b/src/libstd/io/buffered.rs index 90a79da3483..79eedbeda2c 100644 --- a/src/libstd/io/buffered.rs +++ b/src/libstd/io/buffered.rs @@ -18,6 +18,7 @@ use cmp; use error; use fmt; use io::{self, DEFAULT_BUF_SIZE, Error, ErrorKind, SeekFrom}; +use memchr; /// The `BufReader` struct adds buffering to any reader. /// @@ -746,7 +747,7 @@ impl LineWriter { #[stable(feature = "rust1", since = "1.0.0")] impl Write for LineWriter { fn write(&mut self, buf: &[u8]) -> io::Result { - match buf.iter().rposition(|b| *b == b'\n') { + match memchr::memrchr(b'\n', buf) { Some(i) => { let n = try!(self.inner.write(&buf[..i + 1])); if n != i + 1 { return Ok(n) } diff --git a/src/libstd/io/mod.rs b/src/libstd/io/mod.rs index efe40cf07c1..cc3f8097a88 100644 --- a/src/libstd/io/mod.rs +++ b/src/libstd/io/mod.rs @@ -254,6 +254,7 @@ use result; use string::String; use str; use vec::Vec; +use memchr; #[stable(feature = "rust1", since = "1.0.0")] pub use self::buffered::{BufReader, BufWriter, LineWriter}; @@ -1194,7 +1195,7 @@ fn read_until(r: &mut R, delim: u8, buf: &mut Vec) Err(ref e) if e.kind() == ErrorKind::Interrupted => continue, Err(e) => return Err(e) }; - match available.iter().position(|x| *x == delim) { + match memchr::memchr(delim, available) { Some(i) => { buf.extend_from_slice(&available[..i + 1]); (true, i + 1) diff --git a/src/libstd/sys/unix/os.rs b/src/libstd/sys/unix/os.rs index c2bf0651cff..12b9d6191a0 100644 --- a/src/libstd/sys/unix/os.rs +++ b/src/libstd/sys/unix/os.rs @@ -22,6 +22,7 @@ use io; use iter; use libc::{self, c_int, c_char, c_void}; use mem; +use memchr; use path::{self, PathBuf}; use ptr; use slice; @@ -406,7 +407,7 @@ pub fn env() -> Env { if input.is_empty() { return None; } - let pos = input[1..].iter().position(|&b| b == b'=').map(|p| p + 1); + let pos = memchr::memchr(b'=', &input[1..]).map(|p| p + 1); pos.map(|p| ( OsStringExt::from_vec(input[..p].to_vec()), OsStringExt::from_vec(input[p+1..].to_vec()),