Re: [PATCH v2 2/4] do full type check in BARF_UNLESS_COPYABLE
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 9, 2023, 04:27 UTC
- Message-ID
- <xmqqfsckwcw3.fsf@gitster.g>
- In-Reply-To
- <3e04e283-cad0-7be4-d85c-65d0a52289e2@web.de>
René Scharfe <l.s.r@web.de> writes:
Show 5 quoted lines
> We compare the types of the elements, so effectively we do this: > > __builtin_types_compatible_p(__typeof__(const char *), __typeof__(char *)) > > ... which returns 0.
True. I wonder if (const const char *) and (const char *) are deemed compatible? Even if so, probably we cannot write
__builtin_types_compatible_p(const __typeof__(*(dst)), const __typeof__(*(src)))
so that line of thoguht would lead nowhere X-<.
Show 5 quoted lines
> We can remove the const like we already do for Visual Studio. But > then we have to add two casts when passing on argv2, like in > mingw_execv(), because adding a const to a pointer of a pointer > must be done explicitly in C (even though Visual Studio seems to > do it implicitly without complaining). Feels a bit silly. :-|
Indeed. Let's see what folks, whom "git blame" tells us to be area experts around here, think. The "if _MSC, add const" was added in 12fb9bd8 (msvc: mark a variable as non-const, 2019-06-19) by JeffH, and try_shell_exec() function itself came from f1a4dfb8 (Windows: Wrap execve so that shell scripts can be invoked., 2007-12-04), added by J6t.
Show 39 quoted lines
> --- >8 ---
> Subject: [PATCH 1.5/4] mingw: make argv2 in try_shell_exec() non-const
>
> Prepare for a stricter type check in COPY_ARRAY by removing the const
> qualifier of argv2, like we already do to placate Visual Studio. We
> have to add it back using explicit casts when actually using the
> variable, unfortunately, because GCC (rightly) refuses to add it
> implicitly. Similar casts are already used in mingw_execv().
>
> Signed-off-by: René Scharfe <l.s.r@web.de>
> ---
> compat/mingw.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/compat/mingw.c b/compat/mingw.c
> index d614f156df..e131eb9b07 100644
> --- a/compat/mingw.c
> +++ b/compat/mingw.c
> @@ -1839,16 +1839,13 @@ static int try_shell_exec(const char *cmd, char *const *argv)
> if (prog) {
> int exec_id;
> int argc = 0;
> -#ifndef _MSC_VER
> - const
> -#endif
> char **argv2;
> while (argv[argc]) argc++;
> ALLOC_ARRAY(argv2, argc + 1);
> argv2[0] = (char *)cmd; /* full path to the script file */
> COPY_ARRAY(&argv2[1], &argv[1], argc);
> - exec_id = trace2_exec(prog, argv2);
> - pid = mingw_spawnv(prog, argv2, 1);
> + exec_id = trace2_exec(prog, (const char **)argv2);
> + pid = mingw_spawnv(prog, (const char **)argv2, 1);
> if (pid >= 0) {
> int status;
> if (waitpid(pid, &status, 0) < 0)
> --
> 2.38.1.windows.1