Re: [PATCH v2 2/3] compat/mingw: implement a native locate_in_PATH()
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 4, 2023, 04:23 UTC
- Message-ID
- <xmqqjzub306e.fsf@gitster.g>
- In-Reply-To
- <8b8c8c3f70a25f198335e36dfd501ffcb9d411c3.1691122124.git.gitgitgadget@gmail.com>
"Matthias Aßhauer via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 19 quoted lines
> From: =?UTF-8?q?Matthias=20A=C3=9Fhauer?= <mha1993@live.de> > > since 5e1f28d (bisect--helper: reimplement `bisect_visualize()` shell > function in C, 2021-09-13) `git bisect visualize` uses exists_in_PATH() > to check wether it should call `gitk`, but exists_in_PATH() relies on > locate_in_PATH() which currently only understands POSIX-ish PATH variables > (a list of paths, separated by colons) on native Windows executables > we encounter Windows PATH variables (a list of paths that often contain > drive letters (and thus colons), separated by semicolons). Luckily we do > already have a function that can lookup executables on windows PATHs: > path_lookup(). Implement a small replacement for the existing > locate_in_PATH() based on path_lookup(). > > Reported-by: Louis Strous <Louis.Strous@intellimagic.com> > Signed-off-by: Matthias Aßhauer <mha1993@live.de> > --- > compat/mingw.c | 5 +++++ > compat/mingw.h | 3 +++ > 2 files changed, 8 insertions(+)
Makes perfect sense ;-)
Show 30 quoted lines
> diff --git a/compat/mingw.c b/compat/mingw.c
> index d06cdc6254f..bc3669d2986 100644
> --- a/compat/mingw.c
> +++ b/compat/mingw.c
> @@ -1347,6 +1347,11 @@ static char *path_lookup(const char *cmd, int exe_only)
> return prog;
> }
>
> +char *mingw_locate_in_PATH(const char *cmd)
> +{
> + return path_lookup(cmd, 0);
> +}
> +
> static const wchar_t *wcschrnul(const wchar_t *s, wchar_t c)
> {
> while (*s && *s != c)
> diff --git a/compat/mingw.h b/compat/mingw.h
> index 209cf7cebad..b5262205965 100644
> --- a/compat/mingw.h
> +++ b/compat/mingw.h
> @@ -175,6 +175,9 @@ pid_t waitpid(pid_t pid, int *status, int options);
> #define kill mingw_kill
> int mingw_kill(pid_t pid, int sig);
>
> +#define locate_in_PATH mingw_locate_in_PATH
> +char *mingw_locate_in_PATH(const char *cmd);
> +
> #ifndef NO_OPENSSL
> #include <openssl/ssl.h>
> static inline int mingw_SSL_set_fd(SSL *ssl, int fd)