1use anyhow::Result;
2use std::path::PathBuf;
3
4fn remove_prefix(path: &PathBuf) -> PathBuf {
5 let path_str = path.to_str().unwrap_or("");
6 let normalized_str = if path_str.starts_with(r"\\?\") {
7 &path_str[4..] } else {
9 path_str
10 };
11 PathBuf::from(normalized_str)
12}
13
14pub fn normalize_path(mut path: PathBuf, root: PathBuf) -> Result<PathBuf> {
15 if path.is_relative() {
16 path = root.join(path);
17 }
18 path = path.canonicalize()?;
19 Ok(remove_prefix(&path))
20}
21
22pub fn canonicalize_path(path: PathBuf) -> Result<PathBuf> {
23 let path = path.canonicalize()?;
24 Ok(remove_prefix(&path))
25}
26
27pub fn normalize_without_canonicalize(mut path: PathBuf, root: PathBuf) -> PathBuf {
28 if path.is_relative() {
29 path = root.join(path);
30 }
31 path
32}