1
Fork 0

Correct has_root() on Redox

This commit is contained in:
Ian Douglas Scott 2017-08-18 15:56:13 -07:00
parent b272f6ca05
commit e0f0fd08b5
No known key found for this signature in database
GPG key ID: 4924E10E199B5959

View file

@ -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,
}