On Fri, 27 May 2022 18:18:49 +0900 Takashi Yano wrote: > On Fri, 27 May 2022 16:47:09 +0800 > Sam Lin wrote: > > I have also successfully executed that is to move cygwin1.dll to the root > > directory to execute. > > > > Will cygwin1.dll be supported to execute in UDF format in the future? > > As I wrote earlier, it doesn't matter that the file system > is UDF. cygwin1.dll 3.2.0 and later seems to cause problems > if it is placed in the root directory. > > Even with UDF format, the problem does not occur if hello.exe > and cygwin1.dll are placed in any directory other than root > directory.
I looked into this problem and found the problem occurs after the commit: commit 6d898f43fc87a7bf3ab100d75538e381bd86f657 Author: Corinna Vinschen <cori...@vinschen.de> Date: Fri Feb 19 18:15:58 2021 +0100 Cygwin: realpath: fix cygwin installation dir being access via junction Consider this case: - Cygwin installed in C:\cygwin64 - mklink /j D:\cygwin64 C:\cygwin64 - create testcase calling realpath("/", result); printf ("%s\n", result); - start cmd >C:\cygwin64\bin\bash -lc <path-to-testcase> / >D\cygwin64\bin\bash -lc <path-to-testcase> /cygdrive/c/cygwin64 This scenario circumventing the mount point handling which is automated in terms of /, depending on the path returned from GetModuleFileNameW for the Cygwin DLL. When calling D:\cygwin64\bin\bash the dir returned from GetModuleFileNameW is D:\cygwin64\bin, thus root is D:\cygwin64. However, junctions are treated as symlinks in Cygwin which explains why the path gets converted to a cygdrive path. Fix this by calling GetFinalPathNameByHandleW on the result from GetModuleFileNameW to get the correct root path, even if accessed via a junction point. Signed-off-by: Corinna Vinschen <cori...@vinschen.de> And also found the following patch fixes the issue. diff --git a/winsup/cygwin/cygheap.cc b/winsup/cygwin/cygheap.cc index 01b49468e..c4031b919 100644 --- a/winsup/cygwin/cygheap.cc +++ b/winsup/cygwin/cygheap.cc @@ -183,6 +183,8 @@ init_cygheap::init_installation_root () if (p) p = wcschr (p + 1, L'\\'); /* Skip share name */ } + else + p = installation_root_buf + 4; /* 4 is the length of "\\\\?\\" */ } installation_root_buf[1] = L'?'; RtlInitEmptyUnicodeString (&installation_key, installation_key_buf, -- Takashi Yano <takashi.y...@nifty.ne.jp> -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple