summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2019-06-29 09:59:14 +0200
committerPatrick Steinhardt <ps@pks.im>2019-07-20 19:11:20 +0200
commita00842c40a808d193e72bbd7bab1d8030b564447 (patch)
treeb9a287f7417669ed88680bea947e6845264b3df0 /tests
parentded77bb1f18c6cb7a0371b3f66c92387413a161d (diff)
downloadlibgit2-a00842c40a808d193e72bbd7bab1d8030b564447.tar.gz
win32: correctly unlink symlinks to directories
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.
Diffstat (limited to 'tests')
0 files changed, 0 insertions, 0 deletions