Re: [PATCH 2/3] run-command: teach locate_in_PATH about Windows
From: Junio C Hamano <hidden>
Date: 2023-08-03 16:14:02
"Matthias Aßhauer via GitGitGadget" [off-list ref] writes:
quoted hunk
diff --git a/run-command.c b/run-command.c index 60c94198664..8f518e37e27 100644 --- a/run-command.c +++ b/run-command.c@@ -182,13 +182,10 @@ int is_executable(const char *name) * Returns the path to the command, as found in $PATH or NULL if the * command could not be found. The caller inherits ownership of the memory * used to store the resultant path. - * - * This should not be used on Windows, where the $PATH search rules - * are more complicated (e.g., a search for "foo" should find - * "foo.exe"). */ static char *locate_in_PATH(const char *file) { +#ifndef GIT_WINDOWS_NATIVE const char *p = getenv("PATH"); struct strbuf buf = STRBUF_INIT;@@ -217,6 +214,9 @@ static char *locate_in_PATH(const char *file) strbuf_release(&buf); return NULL; +#else + return mingw_path_lookup(file,0); +#endif }
It may be cleaner to make the above more like
#ifndef locate_in_PATH
static char *locate_in_PATH(const char *file)
{
... original implementation without any #ifdef ...
}
#endif
and redo the [1/3] patch so that it does not rename or otherwise
touch path_lookup() in any way, and instead implements a
mingw_locate_in_PATH() in terms of path_lookup() and make it public,
declare it in <compat/mingw.h>, together with #define
locate_in_PATH(), i.e. [1/3] will essentially become something like:
(add to compat/mingw.c)
char *mingw_locate_in_PATH(const char *file)
{
return path_lookup(file, 0);
}
(add to compat/mingw.h)
extern char *mingw_locate_in_PATH(const char *);
#define locate_in_PATH(file) mingw_locate_in_PATH(file)
That way, the second non-UNIXy system can add its own way to locate
an executable in PATH without having to touch the main part of the
system, right?