From e0f0fd08b5e823561848c9541ac432eb30b976bd Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Fri, 18 Aug 2017 15:56:13 -0700 Subject: Correct has_root() on Redox --- src/libstd/path.rs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'src/libstd') diff --git a/src/libstd/path.rs b/src/libstd/path.rs index 866b65ac7e4..5757d447c54 100644 --- a/src/libstd/path.rs +++ b/src/libstd/path.rs @@ -323,6 +323,20 @@ unsafe fn u8_slice_as_os_str(s: &[u8]) -> &OsStr { mem::transmute(s) } +// Detect scheme on Redox +#[inline] +#[allow(unused_variables)] +fn has_scheme(s: &[u8]) -> bool { + #[cfg(target_os = "redox")] + { + s.split(|b| *b == b'/').next().unwrap_or(b"").contains(&b':') + } + #[cfg(not(target_os = "redox"))] + { + false + } +} + //////////////////////////////////////////////////////////////////////////////// // Cross-platform, iterator-independent parsing //////////////////////////////////////////////////////////////////////////////// @@ -605,6 +619,9 @@ pub struct Components<'a> { // normalization, e.g. \\server\share == \\server\share\. has_physical_root: bool, + // For Redox + has_scheme: bool, + // The iterator is double-ended, and these two states keep track of what has // been produced from either end front: State, @@ -725,7 +742,7 @@ impl<'a> Components<'a> { /// Is the *original* path rooted? fn has_root(&self) -> bool { - if self.has_physical_root { + if self.has_physical_root || self.has_scheme { return true; } if let Some(p) = self.prefix { @@ -1692,8 +1709,7 @@ impl Path { #[cfg(target_os = "redox")] { // FIXME: Allow Redox prefixes - use os::unix::ffi::OsStrExt; - self.as_os_str().as_bytes().split(|b| *b == b'/').next().unwrap_or(b"").contains(&b':') + has_scheme(self.as_u8_slice()) } } @@ -2059,6 +2075,7 @@ impl Path { path: self.as_u8_slice(), prefix, has_physical_root: has_physical_root(self.as_u8_slice(), prefix), + has_scheme: has_scheme(self.as_u8_slice()), front: State::Prefix, back: State::Body, } -- cgit 1.4.1-3-g733a5