diff options
| author | joboet <jonasboettiger@icloud.com> | 2024-01-11 20:10:25 +0100 |
|---|---|---|
| committer | joboet <jonasboettiger@icloud.com> | 2024-01-11 20:10:25 +0100 |
| commit | 99128b7e45f8b95d962da2e6ea584767f0c85455 (patch) | |
| tree | 20874cb2d8526a427342c32a45bc63a21022499c /library/std/src/sys/unix/path.rs | |
| parent | 062e7c6a951c1e4f33c0a6f6761755949cde15ec (diff) | |
| download | rust-99128b7e45f8b95d962da2e6ea584767f0c85455.tar.gz rust-99128b7e45f8b95d962da2e6ea584767f0c85455.zip | |
std: begin moving platform support modules into `pal`
Diffstat (limited to 'library/std/src/sys/unix/path.rs')
| -rw-r--r-- | library/std/src/sys/unix/path.rs | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/library/std/src/sys/unix/path.rs b/library/std/src/sys/unix/path.rs deleted file mode 100644 index 837f68d3eaf..00000000000 --- a/library/std/src/sys/unix/path.rs +++ /dev/null @@ -1,63 +0,0 @@ -use crate::env; -use crate::ffi::OsStr; -use crate::io; -use crate::path::{Path, PathBuf, Prefix}; - -#[inline] -pub fn is_sep_byte(b: u8) -> bool { - b == b'/' -} - -#[inline] -pub fn is_verbatim_sep(b: u8) -> bool { - b == b'/' -} - -#[inline] -pub fn parse_prefix(_: &OsStr) -> Option<Prefix<'_>> { - None -} - -pub const MAIN_SEP_STR: &str = "/"; -pub const MAIN_SEP: char = '/'; - -/// Make a POSIX path absolute without changing its semantics. -pub(crate) fn absolute(path: &Path) -> io::Result<PathBuf> { - // This is mostly a wrapper around collecting `Path::components`, with - // exceptions made where this conflicts with the POSIX specification. - // See 4.13 Pathname Resolution, IEEE Std 1003.1-2017 - // https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13 - - // Get the components, skipping the redundant leading "." component if it exists. - let mut components = path.strip_prefix(".").unwrap_or(path).components(); - let path_os = path.as_os_str().as_encoded_bytes(); - - let mut normalized = if path.is_absolute() { - // "If a pathname begins with two successive <slash> characters, the - // first component following the leading <slash> characters may be - // interpreted in an implementation-defined manner, although more than - // two leading <slash> characters shall be treated as a single <slash> - // character." - if path_os.starts_with(b"//") && !path_os.starts_with(b"///") { - components.next(); - PathBuf::from("//") - } else { - PathBuf::new() - } - } else { - env::current_dir()? - }; - normalized.extend(components); - - // "Interfaces using pathname resolution may specify additional constraints - // when a pathname that does not name an existing directory contains at - // least one non- <slash> character and contains one or more trailing - // <slash> characters". - // A trailing <slash> is also meaningful if "a symbolic link is - // encountered during pathname resolution". - if path_os.ends_with(b"/") { - normalized.push(""); - } - - Ok(normalized) -} |
