diff options
| author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2024-12-17 12:52:04 +0000 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2024-12-17 12:06:59 -0800 |
| commit | b30404dfc04a4b087b630aea4ab88a51cd3a7459 (patch) | |
| tree | 4e07da3ef48140a6115a58f199d47cc9098a1650 | |
| parent | compat/mingw: support POSIX semantics for atomic renames (diff) | |
| download | git-b30404dfc04a4b087b630aea4ab88a51cd3a7459.tar.gz git-b30404dfc04a4b087b630aea4ab88a51cd3a7459.zip | |
mingw_rename: do support directory renames
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>
| -rw-r--r-- | compat/mingw.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/compat/mingw.c b/compat/mingw.c index c4320769db..e8f491d03a 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -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; |
