util: Avoid redundant Arc allocation in SanitizedPath::from_arc (#44479)

Release Notes:

- N/A

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
This commit is contained in:
Xiaobo Liu authored and GitHub committed 2025-12-12 13:33:49 +01:00
1 parent 91dc3eafc7
commit 9e7bf4e69f
1 file changed
+9 -2
+9 -2
View File
@@ -227,9 +227,16 @@ impl SanitizedPath {
#[cfg(not(target_os = "windows"))]
return unsafe { mem::transmute::<Arc<Path>, Arc<Self>>(path) };
// TODO: could avoid allocating here if dunce::simplified results in the same path
#[cfg(target_os = "windows")]
return Self::new(&path).into();
{
let simplified = dunce::simplified(path.as_ref());
if simplified == path.as_ref() {
// safe because `Path` and `SanitizedPath` have the same repr and Drop impl
unsafe { mem::transmute::<Arc<Path>, Arc<Self>>(path) }
} else {
Self::unchecked_new(simplified).into()
}
}
}
pub fn new_arc<T: AsRef<Path> + ?Sized>(path: &T) -> Arc<Self> {