When deleting a symlink on Windows, then the way to delete it depends on whether it is a directory symlink or a file symlink. In the first case, we need to use `DeleteFile`, in the second `RemoveDirectory`. Right now, `p_unlink` will only ever try to use `DeleteFile`, though, and thus fail to remove directory symlinks. This mismatches how unlink(3P) is expected to behave, though, as it shall remove any symlink disregarding whether it is a file or directory symlink. In order to correctly unlink a symlink, we thus need to check what kind of file this is. If we were to first query file attributes of every file upon calling `p_unlink`, then this would penalize the common case though. Instead, we can try to first delete the file with `DeleteFile` and only if the error returned is `ERROR_ACCESS_DENIED` will we query file attributes and determine whether it is a directory symlink to use `RemoveDirectory` instead.
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| dir.c | Loading commit data... | |
| dir.h | Loading commit data... | |
| error.c | Loading commit data... | |
| error.h | Loading commit data... | |
| findfile.c | Loading commit data... | |
| findfile.h | Loading commit data... | |
| git2.rc | Loading commit data... | |
| map.c | Loading commit data... | |
| mingw-compat.h | Loading commit data... | |
| msvc-compat.h | Loading commit data... | |
| path_w32.c | Loading commit data... | |
| path_w32.h | Loading commit data... | |
| posix.h | Loading commit data... | |
| posix_w32.c | Loading commit data... | |
| precompiled.c | Loading commit data... | |
| precompiled.h | Loading commit data... | |
| reparse.h | Loading commit data... | |
| thread.c | Loading commit data... | |
| thread.h | Loading commit data... | |
| utf-conv.c | Loading commit data... | |
| utf-conv.h | Loading commit data... | |
| version.h | Loading commit data... | |
| w32_buffer.c | Loading commit data... | |
| w32_buffer.h | Loading commit data... | |
| w32_common.h | Loading commit data... | |
| w32_crtdbg_stacktrace.c | Loading commit data... | |
| w32_crtdbg_stacktrace.h | Loading commit data... | |
| w32_stack.c | Loading commit data... | |
| w32_stack.h | Loading commit data... | |
| w32_util.c | Loading commit data... | |
| w32_util.h | Loading commit data... | |
| win32-compat.h | Loading commit data... |