Fix redox prefix handling

This commit is contained in:
Jeremy Soller 2016-11-14 15:02:18 -07:00
parent a0b5dfef2a
commit 18bf0540bf
2 changed files with 18 additions and 3 deletions

View file

@ -129,7 +129,9 @@ use sys::path::{is_sep_byte, is_verbatim_sep, MAIN_SEP_STR, parse_prefix};
// Windows Prefixes
////////////////////////////////////////////////////////////////////////////////
/// Path prefixes (Windows only).
/// Path prefixes (Redox and Windows only).
///
/// Redox uses schemes like `scheme:reference` to identify different I/O systems
///
/// Windows uses a variety of path styles, including references to drive
/// volumes (like `C:`), network shared folders (like `\\server\share`) and
@ -139,6 +141,10 @@ use sys::path::{is_sep_byte, is_verbatim_sep, MAIN_SEP_STR, parse_prefix};
#[derive(Copy, Clone, Debug, Hash, PartialOrd, Ord, PartialEq, Eq)]
#[stable(feature = "rust1", since = "1.0.0")]
pub enum Prefix<'a> {
/// Prefix `scheme:`, where `scheme` is the component stored
#[unstable(feature="redox_prefix", issue="0")]
Scheme(&'a OsStr),
/// Prefix `\\?\`, together with the given component immediately following it.
#[stable(feature = "rust1", since = "1.0.0")]
Verbatim(#[stable(feature = "rust1", since = "1.0.0")] &'a OsStr),
@ -178,6 +184,7 @@ impl<'a> Prefix<'a> {
os_str_as_u8_slice(s).len()
}
match *self {
Scheme(x) => os_str_len(x) + 1,
Verbatim(x) => 4 + os_str_len(x),
VerbatimUNC(x, y) => {
8 + os_str_len(x) +

View file

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