Skip to content

Commit de3e843

Browse files
committed
Use memchr in libstd where possible, closes #30076
1 parent ca52c56 commit de3e843

File tree

4 files changed

+8
-4
lines changed

4 files changed

+8
-4
lines changed

Diff for: src/libstd/ffi/c_str.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use io;
1919
use iter::Iterator;
2020
use libc;
2121
use mem;
22+
use memchr;
2223
use ops::Deref;
2324
use option::Option::{self, Some, None};
2425
use os::raw::c_char;
@@ -188,7 +189,7 @@ impl CString {
188189
}
189190

190191
fn _new(bytes: Vec<u8>) -> Result<CString, NulError> {
191-
match bytes.iter().position(|x| *x == 0) {
192+
match memchr::memchr(0, &bytes) {
192193
Some(i) => Err(NulError(i, bytes)),
193194
None => Ok(unsafe { CString::from_vec_unchecked(bytes) }),
194195
}

Diff for: src/libstd/io/buffered.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use cmp;
1818
use error;
1919
use fmt;
2020
use io::{self, DEFAULT_BUF_SIZE, Error, ErrorKind, SeekFrom};
21+
use memchr;
2122

2223
/// The `BufReader` struct adds buffering to any reader.
2324
///
@@ -746,7 +747,7 @@ impl<W: Write> LineWriter<W> {
746747
#[stable(feature = "rust1", since = "1.0.0")]
747748
impl<W: Write> Write for LineWriter<W> {
748749
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
749-
match buf.iter().rposition(|b| *b == b'\n') {
750+
match memchr::memrchr(b'\n', buf) {
750751
Some(i) => {
751752
let n = try!(self.inner.write(&buf[..i + 1]));
752753
if n != i + 1 { return Ok(n) }

Diff for: src/libstd/io/mod.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ use result;
254254
use string::String;
255255
use str;
256256
use vec::Vec;
257+
use memchr;
257258

258259
#[stable(feature = "rust1", since = "1.0.0")]
259260
pub use self::buffered::{BufReader, BufWriter, LineWriter};
@@ -1194,7 +1195,7 @@ fn read_until<R: BufRead + ?Sized>(r: &mut R, delim: u8, buf: &mut Vec<u8>)
11941195
Err(ref e) if e.kind() == ErrorKind::Interrupted => continue,
11951196
Err(e) => return Err(e)
11961197
};
1197-
match available.iter().position(|x| *x == delim) {
1198+
match memchr::memchr(delim, available) {
11981199
Some(i) => {
11991200
buf.extend_from_slice(&available[..i + 1]);
12001201
(true, i + 1)

Diff for: src/libstd/sys/unix/os.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use io;
2222
use iter;
2323
use libc::{self, c_int, c_char, c_void};
2424
use mem;
25+
use memchr;
2526
use path::{self, PathBuf};
2627
use ptr;
2728
use slice;
@@ -406,7 +407,7 @@ pub fn env() -> Env {
406407
if input.is_empty() {
407408
return None;
408409
}
409-
let pos = input[1..].iter().position(|&b| b == b'=').map(|p| p + 1);
410+
let pos = memchr::memchr(b'=', &input[1..]).map(|p| p + 1);
410411
pos.map(|p| (
411412
OsStringExt::from_vec(input[..p].to_vec()),
412413
OsStringExt::from_vec(input[p+1..].to_vec()),

0 commit comments

Comments
 (0)