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
2025-12-12 13:33:49 +01:00
committed by GitHub
parent e03fa114a7
commit a07ea1a272
+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> {