about summary refs log tree commit diff
path: root/src/libstd/path
diff options
context:
space:
mode:
authorKevin Butler <haqkrs@gmail.com>2014-04-08 02:30:08 +0100
committerKevin Butler <haqkrs@gmail.com>2014-04-11 20:27:01 +0100
commitd1e20488a5d1258b1582caa2db77e5210b8bd28f (patch)
tree1f2bd0e6c2fefa86deba85d0d6f7c7d2d38b29df /src/libstd/path
parent65abf96fb6630d7ddbcdc3b39f599c02ecfc2f1e (diff)
downloadrust-d1e20488a5d1258b1582caa2db77e5210b8bd28f.tar.gz
rust-d1e20488a5d1258b1582caa2db77e5210b8bd28f.zip
Parameterize contains_nul for BytesContainer.
Diffstat (limited to 'src/libstd/path')
-rw-r--r--src/libstd/path/mod.rs14
-rw-r--r--src/libstd/path/windows.rs9
2 files changed, 11 insertions, 12 deletions
diff --git a/src/libstd/path/mod.rs b/src/libstd/path/mod.rs
index a0097469e56..54a8d813137 100644
--- a/src/libstd/path/mod.rs
+++ b/src/libstd/path/mod.rs
@@ -158,7 +158,7 @@ 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) }
     }
 
@@ -166,7 +166,7 @@ pub trait GenericPath: Clone + GenericPathUnsafe {
     /// 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) })
@@ -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.
@@ -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() {
@@ -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`.
@@ -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)]
diff --git a/src/libstd/path/windows.rs b/src/libstd/path/windows.rs
index 57dae68b842..93d8d9e3eb4 100644
--- a/src/libstd/path/windows.rs
+++ b/src/libstd/path/windows.rs
@@ -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) })
                 }
             }
         }