From: Johannes Schindelin Date: Mon, 17 Jan 2022 20:20:45 +0000 (+0100) Subject: Cygwin: path_conv: do not get confused by a directory with `.lnk` suffix X-Git-Tag: cygwin-3.4.0~721 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=bd4fdcc0593468237d77035e0f39a0155d17e5bf;p=newlib-cygwin.git 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 --- 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; }