refactor: Remove bespoke from_os_str_bytes_unchecked
This commit is contained in:
parent
7f1a6cd421
commit
7b9290384e
2 changed files with 23 additions and 33 deletions
|
@ -299,20 +299,6 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
unsafe fn u8_slice_as_os_str(s: &[u8]) -> &OsStr {
|
||||
// SAFETY: See note at the top of this module to understand why this and
|
||||
// `OsStr::bytes` are used:
|
||||
//
|
||||
// This casts are safe as OsStr is internally a wrapper around [u8] on all
|
||||
// platforms.
|
||||
//
|
||||
// Note that currently this relies on the special knowledge that std has;
|
||||
// these types are single-element structs but are not marked
|
||||
// repr(transparent) or repr(C) which would make these casts not allowable
|
||||
// outside std.
|
||||
unsafe { &*(s as *const [u8] as *const OsStr) }
|
||||
}
|
||||
|
||||
// Detect scheme on Redox
|
||||
fn has_redox_scheme(s: &[u8]) -> bool {
|
||||
cfg!(target_os = "redox") && s.contains(&b':')
|
||||
|
@ -344,7 +330,12 @@ fn rsplit_file_at_dot(file: &OsStr) -> (Option<&OsStr>, Option<&OsStr>) {
|
|||
if before == Some(b"") {
|
||||
(Some(file), None)
|
||||
} else {
|
||||
unsafe { (before.map(|s| u8_slice_as_os_str(s)), after.map(|s| u8_slice_as_os_str(s))) }
|
||||
unsafe {
|
||||
(
|
||||
before.map(|s| OsStr::from_os_str_bytes_unchecked(s)),
|
||||
after.map(|s| OsStr::from_os_str_bytes_unchecked(s)),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -364,7 +355,12 @@ fn split_file_at_dot(file: &OsStr) -> (&OsStr, Option<&OsStr>) {
|
|||
};
|
||||
let before = &slice[..i];
|
||||
let after = &slice[i + 1..];
|
||||
unsafe { (u8_slice_as_os_str(before), Some(u8_slice_as_os_str(after))) }
|
||||
unsafe {
|
||||
(
|
||||
OsStr::from_os_str_bytes_unchecked(before),
|
||||
Some(OsStr::from_os_str_bytes_unchecked(after)),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -743,7 +739,7 @@ impl<'a> Components<'a> {
|
|||
// separately via `include_cur_dir`
|
||||
b".." => Some(Component::ParentDir),
|
||||
b"" => None,
|
||||
_ => Some(Component::Normal(unsafe { u8_slice_as_os_str(comp) })),
|
||||
_ => Some(Component::Normal(unsafe { OsStr::from_os_str_bytes_unchecked(comp) })),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -900,7 +896,7 @@ impl<'a> Iterator for Components<'a> {
|
|||
let raw = &self.path[..self.prefix_len()];
|
||||
self.path = &self.path[self.prefix_len()..];
|
||||
return Some(Component::Prefix(PrefixComponent {
|
||||
raw: unsafe { u8_slice_as_os_str(raw) },
|
||||
raw: unsafe { OsStr::from_os_str_bytes_unchecked(raw) },
|
||||
parsed: self.prefix.unwrap(),
|
||||
}));
|
||||
}
|
||||
|
@ -972,7 +968,7 @@ impl<'a> DoubleEndedIterator for Components<'a> {
|
|||
State::Prefix if self.prefix_len() > 0 => {
|
||||
self.back = State::Done;
|
||||
return Some(Component::Prefix(PrefixComponent {
|
||||
raw: unsafe { u8_slice_as_os_str(self.path) },
|
||||
raw: unsafe { OsStr::from_os_str_bytes_unchecked(self.path) },
|
||||
parsed: self.prefix.unwrap(),
|
||||
}));
|
||||
}
|
||||
|
@ -2011,7 +2007,7 @@ impl Path {
|
|||
// The following (private!) function allows construction of a path from a u8
|
||||
// slice, which is only safe when it is known to follow the OsStr encoding.
|
||||
unsafe fn from_u8_slice(s: &[u8]) -> &Path {
|
||||
unsafe { Path::new(u8_slice_as_os_str(s)) }
|
||||
unsafe { Path::new(OsStr::from_os_str_bytes_unchecked(s)) }
|
||||
}
|
||||
// The following (private!) function reveals the byte encoding used for OsStr.
|
||||
fn as_u8_slice(&self) -> &[u8] {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue