Skip to content

Commit a05ee44

Browse files
kbleesdscho
authored andcommitted
Win32: mingw_unlink: support symlinks to directories
_wunlink() / DeleteFileW() refuses to delete symlinks to directories. If _wunlink() fails with ERROR_ACCESS_DENIED, try _wrmdir() as well. Signed-off-by: Karsten Blees <[email protected]>
1 parent e0cbfb3 commit a05ee44

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

compat/mingw.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,13 @@ int mingw_unlink(const char *pathname)
378378
return 0;
379379
if (!is_file_in_use_error(GetLastError()))
380380
break;
381+
/*
382+
* _wunlink() / DeleteFileW() for directory symlinks fails with
383+
* ERROR_ACCESS_DENIED (EACCES), so try _wrmdir() as well. This is the
384+
* same error we get if a file is in use (already checked above).
385+
*/
386+
if (!_wrmdir(wpathname))
387+
return 0;
381388
} while (retry_ask_yes_no(&tries, "Unlink of file '%s' failed. "
382389
"Should I try again?", pathname));
383390
return -1;

0 commit comments

Comments
 (0)