Win: Remove special casing of the win7 target for std::fs::rename

This commit is contained in:
George Tokmaji
2024-10-17 00:27:46 +02:00
parent e2bb09467d
commit 8975a6dcf0

View File

@@ -1188,11 +1188,7 @@ pub fn rename(old: &Path, new: &Path) -> io::Result<()> {
// SAFETY: We have allocated enough memory for a full FILE_RENAME_INFO struct and a filename. // SAFETY: We have allocated enough memory for a full FILE_RENAME_INFO struct and a filename.
unsafe { unsafe {
(&raw mut (*file_rename_info).Anonymous).write(c::FILE_RENAME_INFO_0 { (&raw mut (*file_rename_info).Anonymous).write(c::FILE_RENAME_INFO_0 {
// Don't bother with FileRenameInfo on Windows 7 since it doesn't exist.
#[cfg(not(target_vendor = "win7"))]
Flags: c::FILE_RENAME_FLAG_REPLACE_IF_EXISTS | c::FILE_RENAME_FLAG_POSIX_SEMANTICS, Flags: c::FILE_RENAME_FLAG_REPLACE_IF_EXISTS | c::FILE_RENAME_FLAG_POSIX_SEMANTICS,
#[cfg(target_vendor = "win7")]
ReplaceIfExists: 1,
}); });
(&raw mut (*file_rename_info).RootDirectory).write(ptr::null_mut()); (&raw mut (*file_rename_info).RootDirectory).write(ptr::null_mut());
@@ -1202,22 +1198,16 @@ pub fn rename(old: &Path, new: &Path) -> io::Result<()> {
.copy_to_nonoverlapping((&raw mut (*file_rename_info).FileName) as *mut u16, new.len()); .copy_to_nonoverlapping((&raw mut (*file_rename_info).FileName) as *mut u16, new.len());
} }
#[cfg(not(target_vendor = "win7"))]
const FileInformationClass: c::FILE_INFO_BY_HANDLE_CLASS = c::FileRenameInfoEx;
#[cfg(target_vendor = "win7")]
const FileInformationClass: c::FILE_INFO_BY_HANDLE_CLASS = c::FileRenameInfo;
// We don't use `set_file_information_by_handle` here as `FILE_RENAME_INFO` is used for both `FileRenameInfo` and `FileRenameInfoEx`. // We don't use `set_file_information_by_handle` here as `FILE_RENAME_INFO` is used for both `FileRenameInfo` and `FileRenameInfoEx`.
let result = unsafe { let result = unsafe {
cvt(c::SetFileInformationByHandle( cvt(c::SetFileInformationByHandle(
handle.as_raw_handle(), handle.as_raw_handle(),
FileInformationClass, c::FileRenameInfoEx,
(&raw const *file_rename_info).cast::<c_void>(), (&raw const *file_rename_info).cast::<c_void>(),
struct_size, struct_size,
)) ))
}; };
#[cfg(not(target_vendor = "win7"))]
if let Err(err) = result { if let Err(err) = result {
if err.raw_os_error() == Some(c::ERROR_INVALID_PARAMETER as _) { if err.raw_os_error() == Some(c::ERROR_INVALID_PARAMETER as _) {
// FileRenameInfoEx and FILE_RENAME_FLAG_POSIX_SEMANTICS were added in Windows 10 1607; retry with FileRenameInfo. // FileRenameInfoEx and FILE_RENAME_FLAG_POSIX_SEMANTICS were added in Windows 10 1607; retry with FileRenameInfo.
@@ -1236,9 +1226,6 @@ pub fn rename(old: &Path, new: &Path) -> io::Result<()> {
} }
} }
#[cfg(target_vendor = "win7")]
result?;
Ok(()) Ok(())
} }