Fix redox prefix handling
This commit is contained in:
parent
a0b5dfef2a
commit
18bf0540bf
2 changed files with 18 additions and 3 deletions
|
|
@ -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) +
|
||||
|
|
|
|||
|
|
@ -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 = "/";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue