]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/mv.c: use the MOVE_ARRAY() macro instead of memmove()
authorJunio C Hamano <gitster@pobox.com>
Sun, 10 Jul 2022 01:33:54 +0000 (18:33 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 10 Jul 2022 01:38:57 +0000 (18:38 -0700)
The variables 'source', 'destination', and 'submodule_gitfile' are
all of type "const char **", and an element of such an array is of
"type const char *", but these memmove() calls were written as if
these variables are of type "char **".

Once these memmove() calls are fixed to use the correct type to
compute the number of bytes to be moved, e.g.

-      memmove(source + i, source + i + 1, n * sizeof(char *));
+      memmove(source + i, source + i + 1, n * sizeof(const char *));

existing contrib/coccinelle/array.cocci rules can recognize them as
candidates for turning into MOVE_ARRAY().

While at it, use CALLOC_ARRAY() instead of xcalloc() to allocate the
modes[] array that is involved in the change.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/mv.c

index 83a465ba831adf94561a13f3d358926f516fe9ac..859fa5023f37aa629a382b1a6d6c3b19c032e11e 100644 (file)
@@ -148,7 +148,8 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
                die(_("index file corrupt"));
 
        source = internal_prefix_pathspec(prefix, argv, argc, 0);
-       modes = xcalloc(argc, sizeof(enum update_mode));
+       CALLOC_ARRAY(modes, argc);
+
        /*
         * Keep trailing slash, needed to let
         * "git mv file no-such-dir/" error out, except in the case
@@ -282,14 +283,11 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
 remove_entry:
                if (--argc > 0) {
                        int n = argc - i;
-                       memmove(source + i, source + i + 1,
-                               n * sizeof(char *));
-                       memmove(destination + i, destination + i + 1,
-                               n * sizeof(char *));
-                       memmove(modes + i, modes + i + 1,
-                               n * sizeof(enum update_mode));
-                       memmove(submodule_gitfile + i, submodule_gitfile + i + 1,
-                               n * sizeof(char *));
+                       MOVE_ARRAY(source + i, source + i + 1, n);
+                       MOVE_ARRAY(destination + i, destination + i + 1, n);
+                       MOVE_ARRAY(modes + i, modes + i + 1, n);
+                       MOVE_ARRAY(submodule_gitfile + i,
+                                  submodule_gitfile + i + 1, n);
                        i--;
                }
        }