Skip to content

Commit

Permalink
Parameterize contains_nul for BytesContainer.
Browse files Browse the repository at this point in the history
  • Loading branch information
Ryman committed Apr 11, 2014
1 parent 65abf96 commit d1e2048
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 12 deletions.
14 changes: 7 additions & 7 deletions src/libstd/path/mod.rs
Expand Up @@ -158,15 +158,15 @@ pub trait GenericPath: Clone + GenericPathUnsafe {
/// See individual Path impls for additional restrictions.
#[inline]
fn new<T: BytesContainer>(path: T) -> Self {
assert!(!contains_nul(path.container_as_bytes()));
assert!(!contains_nul(&path));
unsafe { GenericPathUnsafe::new_unchecked(path) }
}

/// Creates a new Path from a byte vector or string, if possible.
/// The resulting Path will always be normalized.
#[inline]
fn new_opt<T: BytesContainer>(path: T) -> Option<Self> {
if contains_nul(path.container_as_bytes()) {
if contains_nul(&path) {
None
} else {
Some(unsafe { GenericPathUnsafe::new_unchecked(path) })
Expand Down Expand Up @@ -274,7 +274,7 @@ pub trait GenericPath: Clone + GenericPathUnsafe {
/// Fails the task if the filename contains a NUL.
#[inline]
fn set_filename<T: BytesContainer>(&mut self, filename: T) {
assert!(!contains_nul(filename.container_as_bytes()));
assert!(!contains_nul(&filename));
unsafe { self.set_filename_unchecked(filename) }
}
/// Replaces the extension with the given byte vector or string.
Expand All @@ -286,7 +286,7 @@ pub trait GenericPath: Clone + GenericPathUnsafe {
///
/// Fails the task if the extension contains a NUL.
fn set_extension<T: BytesContainer>(&mut self, extension: T) {
assert!(!contains_nul(extension.container_as_bytes()));
assert!(!contains_nul(&extension));
// borrowck causes problems here too
let val = {
match self.filename() {
Expand Down Expand Up @@ -376,7 +376,7 @@ pub trait GenericPath: Clone + GenericPathUnsafe {
/// Fails the task if the path contains a NUL.
#[inline]
fn push<T: BytesContainer>(&mut self, path: T) {
assert!(!contains_nul(path.container_as_bytes()));
assert!(!contains_nul(&path));
unsafe { self.push_unchecked(path) }
}
/// Pushes multiple paths (as byte vectors or strings) onto `self`.
Expand Down Expand Up @@ -589,8 +589,8 @@ impl<'a> BytesContainer for str::MaybeOwned<'a> {
}

#[inline(always)]
fn contains_nul(v: &[u8]) -> bool {
v.iter().any(|&x| x == 0)
fn contains_nul<T: BytesContainer>(v: &T) -> bool {
v.container_as_bytes().iter().any(|&x| x == 0)
}

#[cfg(test)]
Expand Down
9 changes: 4 additions & 5 deletions src/libstd/path/windows.rs
Expand Up @@ -306,14 +306,13 @@ impl GenericPathUnsafe for Path {
impl GenericPath for Path {
#[inline]
fn new_opt<T: BytesContainer>(path: T) -> Option<Path> {
let s = path.container_as_str();
match s {
match path.container_as_str() {
None => None,
Some(s) => {
if contains_nul(s.as_bytes()) {
Some(ref s) => {
if contains_nul(s) {
None
} else {
Some(unsafe { GenericPathUnsafe::new_unchecked(s) })
Some(unsafe { GenericPathUnsafe::new_unchecked(*s) })
}
}
}
Expand Down

0 comments on commit d1e2048

Please sign in to comment.