merge-file: refactor for subsequent memory leak fix

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>

Ævar Arnfjörð Bjarmason committed Jul 1, 2022 at 12:42 UTC 480a0e30a78a6a86e1ea97059f72e4bf4299d052
1 file changed +14 -12
builtin/merge-file.c
+14 -12
@@ -25,10 +25,10 @@ static int label_cb(const struct option *opt, const char *arg, int unset)
25
26 int cmd_merge_file(int argc, const char **argv, const char *prefix)
27 {
28 - const char *names[3] = { NULL, NULL, NULL };
29 - mmfile_t mmfs[3];
30 - mmbuffer_t result = {NULL, 0};
31 - xmparam_t xmp = {{0}};
28 + const char *names[3] = { 0 };
29 + mmfile_t mmfs[3] = { 0 };
30 + mmbuffer_t result = { 0 };
31 + xmparam_t xmp = { 0 };
32 int ret = 0, i = 0, to_stdout = 0;
33 int quiet = 0;
34 struct option options[] = {
@@ -71,21 +71,23 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
71
72 for (i = 0; i < 3; i++) {
73 char *fname;
74 - int ret;
74 + mmfile_t *mmf = mmfs + i;
75
76 if (!names[i])
77 names[i] = argv[i];
78
79 fname = prefix_filename(prefix, argv[i]);
80 - ret = read_mmfile(mmfs + i, fname);
80 +
81 + if (read_mmfile(mmf, fname))
82 + ret = -1;
83 + else if (mmf->size > MAX_XDIFF_SIZE ||
84 + buffer_is_binary(mmf->ptr, mmf->size))
85 + ret = error("Cannot merge binary files: %s",
86 + argv[i]);
87 +
88 free(fname);
89 if (ret)
83 - return -1;
84 -
85 - if (mmfs[i].size > MAX_XDIFF_SIZE ||
86 - buffer_is_binary(mmfs[i].ptr, mmfs[i].size))
87 - return error("Cannot merge binary files: %s",
88 - argv[i]);
90 + return ret;
91 }
92
93 xmp.ancestor = names[1];