]> git.ipfire.org Git - thirdparty/git.git/commitdiff
merge-file: refactor for subsequent memory leak fix
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Fri, 1 Jul 2022 10:42:55 +0000 (12:42 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Jul 2022 18:43:43 +0000 (11:43 -0700)
Refactor the code in builtin/merge-file.c to:

 * Use the initializer to zero out "mmfs", and use modern C syntax for
   the rest.

 * Refactor the the inner loop to use a variable and "if/else if"
   pattern followed by "return". This will make a change to change it to
   a "goto cleanup" pattern smaller.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/merge-file.c

index e695867ee54894dceb5b0460cc9e0670d0f50607..793817f3cb9bca482a6323c4d3a9a34f773357f2 100644 (file)
@@ -25,10 +25,10 @@ static int label_cb(const struct option *opt, const char *arg, int unset)
 
 int cmd_merge_file(int argc, const char **argv, const char *prefix)
 {
-       const char *names[3] = { NULL, NULL, NULL };
-       mmfile_t mmfs[3];
-       mmbuffer_t result = {NULL, 0};
-       xmparam_t xmp = {{0}};
+       const char *names[3] = { 0 };
+       mmfile_t mmfs[3] = { 0 };
+       mmbuffer_t result = { 0 };
+       xmparam_t xmp = { 0 };
        int ret = 0, i = 0, to_stdout = 0;
        int quiet = 0;
        struct option options[] = {
@@ -71,21 +71,23 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
 
        for (i = 0; i < 3; i++) {
                char *fname;
-               int ret;
+               mmfile_t *mmf = mmfs + i;
 
                if (!names[i])
                        names[i] = argv[i];
 
                fname = prefix_filename(prefix, argv[i]);
-               ret = read_mmfile(mmfs + i, fname);
+
+               if (read_mmfile(mmf, fname))
+                       ret = -1;
+               else if (mmf->size > MAX_XDIFF_SIZE ||
+                        buffer_is_binary(mmf->ptr, mmf->size))
+                       ret = error("Cannot merge binary files: %s",
+                                   argv[i]);
+
                free(fname);
                if (ret)
-                       return -1;
-
-               if (mmfs[i].size > MAX_XDIFF_SIZE ||
-                   buffer_is_binary(mmfs[i].ptr, mmfs[i].size))
-                       return error("Cannot merge binary files: %s",
-                                       argv[i]);
+                       return ret;
        }
 
        xmp.ancestor = names[1];