]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mingw_rename: do support directory renames
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Tue, 17 Dec 2024 12:52:04 +0000 (12:52 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 17 Dec 2024 20:06:59 +0000 (12:06 -0800)
In 391bceae435 (compat/mingw: support POSIX semantics for atomic
renames, 2024-10-27), we taught the `mingw_rename()` function to respect
POSIX semantics, but we did so only as a fallback after `_wrename()`
fails.

This hid a bug in the implementation that was not caught by Git's test
suite: The `CreateFileW()` function _can_ open handles to directories,
but not when asked to use the `FILE_ATTRIBUTE_NORMAL` flag, as that flag
only is allowed for files.

Let's fix this by using the common `FILE_FLAG_BACKUP_SEMANTICS` flag
that can be used for opening handles to directories, too.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/mingw.c

index c4320769db654d881d39abceb616adc8cba21a76..e8f491d03a7096220f3a405057bfa05bfda4de13 100644 (file)
@@ -2273,7 +2273,7 @@ repeat:
 
                old_handle = CreateFileW(wpold, DELETE,
                                         FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE,
-                                        NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+                                        NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
                if (old_handle == INVALID_HANDLE_VALUE) {
                        errno = err_win_to_posix(GetLastError());
                        return -1;