From bd4fdcc0593468237d77035e0f39a0155d17e5bf Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Mon, 17 Jan 2022 21:20:45 +0100 Subject: Cygwin: path_conv: do not get confused by a directory with `.lnk` suffix When trying to create a directory called `xyz` in the presence of a directory `xyz.lnk`, the Cygwin runtime errors out with an `ENOENT`. The root cause is actually a bit deeper: the `symlink_info::check()` method tries to figure out whether the given path refers to a symbolic link as emulated via `.lnk` files, but since it is a directory, that is not the case, and that hypothesis is rejected. However, the `fileattr` field is not cleared, so that a later `.exists()` call on the instance mistakenly thinks that the symlink actually exists. Let's clear that field. This fixes https://github.com/msys2/msys2-runtime/issues/81 Signed-off-by: Johannes Schindelin --- winsup/cygwin/path.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'winsup') diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 5ab75f105..87ac2404a 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -3336,6 +3336,7 @@ restart: hasn't been found. */ if (ext_tacked_on && !had_ext && (fileattr & FILE_ATTRIBUTE_DIRECTORY)) { + fileattr = INVALID_FILE_ATTRIBUTES; set_error (ENOENT); continue; } -- cgit v1.2.3