mingw: use COPY_ARRAY for copying array
diff mbox series

Message ID 35123410-245b-0e3f-7227-94c293b57182@web.de
State New
Headers show
Series
  • mingw: use COPY_ARRAY for copying array
Related show

Commit Message

René Scharfe Nov. 12, 2019, 9:41 p.m. UTC
Use the macro COPY_ARRAY to copy array elements.  The result is shorter
and safer, as it infers the element type automatically and does a (very)
basic type compatibility check for its first two arguments.

Coccinelle and contrib/coccinelle/array.cocci did not generate this
conversion due to the offset of 1 at both source and destination and
because the source is a const pointer; the semantic patch cautiously
handles only pure pointers and array references of the same type.

Signed-off-by: René Scharfe <l.s.r@web.de>
---
 compat/mingw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--
2.24.0

Comments

Johannes Schindelin Nov. 13, 2019, 8:55 a.m. UTC | #1
Hi René,

On Tue, 12 Nov 2019, René Scharfe wrote:

> Use the macro COPY_ARRAY to copy array elements.  The result is shorter
> and safer, as it infers the element type automatically and does a (very)
> basic type compatibility check for its first two arguments.
>
> Coccinelle and contrib/coccinelle/array.cocci did not generate this
> conversion due to the offset of 1 at both source and destination and
> because the source is a const pointer; the semantic patch cautiously
> handles only pure pointers and array references of the same type.
>
> Signed-off-by: René Scharfe <l.s.r@web.de>
> ---

Looks good to me. Thanks,
Dscho

>  compat/mingw.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/compat/mingw.c b/compat/mingw.c
> index fe609239dd..2f4654c968 100644
> --- a/compat/mingw.c
> +++ b/compat/mingw.c
> @@ -1566,7 +1566,7 @@ static int try_shell_exec(const char *cmd, char *const *argv)
>  		while (argv[argc]) argc++;
>  		ALLOC_ARRAY(argv2, argc + 1);
>  		argv2[0] = (char *)cmd;	/* full path to the script file */
> -		memcpy(&argv2[1], &argv[1], sizeof(*argv) * argc);
> +		COPY_ARRAY(&argv2[1], &argv[1], argc);
>  		exec_id = trace2_exec(prog, argv2);
>  		pid = mingw_spawnv(prog, argv2, 1);
>  		if (pid >= 0) {
> --
> 2.24.0
>
>

Patch
diff mbox series

diff --git a/compat/mingw.c b/compat/mingw.c
index fe609239dd..2f4654c968 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1566,7 +1566,7 @@  static int try_shell_exec(const char *cmd, char *const *argv)
 		while (argv[argc]) argc++;
 		ALLOC_ARRAY(argv2, argc + 1);
 		argv2[0] = (char *)cmd;	/* full path to the script file */
-		memcpy(&argv2[1], &argv[1], sizeof(*argv) * argc);
+		COPY_ARRAY(&argv2[1], &argv[1], argc);
 		exec_id = trace2_exec(prog, argv2);
 		pid = mingw_spawnv(prog, argv2, 1);
 		if (pid >= 0) {