Currently when starting a process from bash via a native symlink, argv[0] is set to the realpath of the executable and not to the link name. This patch fixes it so the path of the symlink is seen instead.
The cause is a path conversion in perhaps_suffix which follows native symlinks. Hence the fix this patch uses is to add PC_SYM_NOFOLLOW_REP when calling path_conv::check to prevent that. Fixes: 1fd5e000ace55 ("import winsup-2000-02-17 snapshot") Signed-off-by: SquallATF <squall...@gmail.com> --- winsup/cygwin/spawn.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index 06b84236d..ef175e708 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -43,7 +43,9 @@ perhaps_suffix (const char *prog, path_conv& buf, int& err, unsigned opt) err = 0; debug_printf ("prog '%s'", prog); - buf.check (prog, PC_SYM_FOLLOW | PC_NULLEMPTY | PC_POSIX, stat_suffixes); + buf.check (prog, + PC_SYM_FOLLOW | PC_SYM_NOFOLLOW_REP | PC_NULLEMPTY | PC_POSIX, + stat_suffixes); if (buf.isdir ()) { -- 2.48.1.windows.1 ---- On Mon, 10 Mar 2025 19:15:08 +0000 Corinna Vinschen wrote --- > Hi Chris, > > On Mar 10 15:46, Chris Denton wrote: > > This upstreams the msys2 patch: > > https://github.com/msys2/MSYS2-packages/blob/6a02000fd93c6b2001220507e5369a726b6381c4/msys2-runtime/0021-Fix-native-symbolic-link-spawn-passing-wrong-arg0.patch > > > > > > Original msys2 issue: > > https://github.com/msys2/MSYS2-packages/issues/1327 > > Sorry, but not like this. The commit message should describe the problem > and the chosen solution, not just point to some external websites. > > It's also missing a Fixes: and a Signed-off-by: line, the latter ideally > from the original author of the patch. > > > --- > > winsup/cygwin/spawn.cc | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc > > index 06b84236d..b81ccefb7 100644 > > --- a/winsup/cygwin/spawn.cc > > +++ b/winsup/cygwin/spawn.cc > > @@ -43,7 +43,7 @@ perhaps_suffix (const char *prog, path_conv& buf, int& > > err, unsigned opt) > > > > err = 0; > > debug_printf ("prog '%s'", prog); > > - buf.check (prog, PC_SYM_FOLLOW | PC_NULLEMPTY | PC_POSIX, > > stat_suffixes); > > + buf.check (prog, PC_SYM_FOLLOW | PC_SYM_NOFOLLOW_REP | PC_NULLEMPTY | > > PC_POSIX, stat_suffixes); > > Formatting should try to stick to max. 80 chars per line, please. > > > Thanks, > Corinna >