Browse Source

Make std::path aware of archive prefixes (#61)

pull/10/head
FenrirWolf 7 years ago committed by GitHub
parent
commit
c95c3289f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      ctr-std/src/path.rs
  2. 12
      ctr-std/src/sys/unix/path.rs

8
ctr-std/src/path.rs

@ -201,6 +201,9 @@ impl<'a> Prefix<'a> {
os_str_as_u8_slice(s).len() os_str_as_u8_slice(s).len()
} }
match *self { match *self {
#[cfg(target_os = "horizon")]
Verbatim(x) => 1 + os_str_len(x),
#[cfg(target_os = "windows")]
Verbatim(x) => 4 + os_str_len(x), Verbatim(x) => 4 + os_str_len(x),
VerbatimUNC(x, y) => { VerbatimUNC(x, y) => {
8 + os_str_len(x) + 8 + os_str_len(x) +
@ -325,7 +328,8 @@ unsafe fn u8_slice_as_os_str(s: &[u8]) -> &OsStr {
// Detect scheme on Redox // Detect scheme on Redox
fn has_redox_scheme(s: &[u8]) -> bool { fn has_redox_scheme(s: &[u8]) -> bool {
cfg!(target_os = "redox") && s.split(|b| *b == b'/').next().unwrap_or(b"").contains(&b':') (cfg!(target_os = "redox") || cfg!(target_os = "horizon"))
&& s.split(|b| *b == b'/').next().unwrap_or(b"").contains(&b':')
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -1736,7 +1740,7 @@ impl Path {
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[allow(deprecated)] #[allow(deprecated)]
pub fn is_absolute(&self) -> bool { pub fn is_absolute(&self) -> bool {
if cfg!(target_os = "redox") { if cfg!(target_os = "redox") || cfg!(target_os = "horizon") {
// FIXME: Allow Redox prefixes // FIXME: Allow Redox prefixes
self.has_root() || has_redox_scheme(self.as_u8_slice()) self.has_root() || has_redox_scheme(self.as_u8_slice())
} else { } else {

12
ctr-std/src/sys/unix/path.rs

@ -21,8 +21,16 @@ pub fn is_verbatim_sep(b: u8) -> bool {
b == b'/' b == b'/'
} }
pub fn parse_prefix(_: &OsStr) -> Option<Prefix> { pub fn parse_prefix(path: &OsStr) -> Option<Prefix> {
None if let Some(path_str) = path.to_str() {
if let Some(i) = path_str.find(':') {
Some(Prefix::Verbatim(OsStr::new(&path_str[..i])))
} else {
None
}
} else {
None
}
} }
pub const MAIN_SEP_STR: &'static str = "/"; pub const MAIN_SEP_STR: &'static str = "/";

Loading…
Cancel
Save