git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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
Previous: René ScharfeNext: Jeff Hostetler
Message 17 of 20 in “COPY_ARRAY, MOVE_ARRAY, DUP_ARRAY”
  1. 0/3 COPY_ARRAY, MOVE_ARRAY, DUP_ARRAYRené Scharfe, Dec 30, 2022
  2. 1/3 do full type check in COPY_ARRAY and MOVE_ARRAYRené Scharfe, Dec 30, 2022
  3. Junio C HamanoJan 1, 2023
  4. Junio C HamanoJan 1, 2023
  5. René ScharfeJan 1, 2023
  6. René ScharfeJan 1, 2023
  7. Junio C HamanoJan 1, 2023
  8. René ScharfeJan 1, 2023
  9. Junio C HamanoJan 1, 2023
  10. 2/3 add DUP_ARRAYRené Scharfe, Dec 30, 2022
  11. 3/3 use DUP_ARRAYRené Scharfe, Dec 30, 2022
  12. 0/4 COPY_ARRAY, MOVE_ARRAY, DUP_ARRAYRené Scharfe, Jan 1, 2023
  13. 1/4 factor out BARF_UNLESS_COPYABLERené Scharfe, Jan 1, 2023
  14. 2/4 do full type check in BARF_UNLESS_COPYABLERené Scharfe, Jan 1, 2023
  15. Junio C HamanoJan 8, 2023
  16. René ScharfeJan 8, 2023
  17. Junio C HamanoJan 9, 2023
  18. Jeff HostetlerJan 9, 2023
  19. 3/4 add DUP_ARRAYRené Scharfe, Jan 1, 2023
  20. 4/4 use DUP_ARRAYRené Scharfe, Jan 1, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.