From: Christian Couder Date: Fri, 26 Jun 2009 21:08:45 GMT Subject: [PATCH 3/4] sequencer: free memory used in "make_patch" function Message-ID: <20090626210847.3885.22240.chriscool@tuxfamily.org> In-Reply-To: <20090626205319.3885.91532.chriscool@tuxfamily.org> Signed-off-by: Christian Couder --- builtin-sequencer--helper.c | 20 ++++++++++++-------- 1 files changed, 12 insertions(+), 8 deletions(-) diff --git a/builtin-sequencer--helper.c b/builtin-sequencer--helper.c index 8d32480..1dda525 100644 --- a/builtin-sequencer--helper.c +++ b/builtin-sequencer--helper.c @@ -18,6 +18,7 @@ static void make_patch(struct commit *commit) struct commit_list *parents = commit->parents; const char **args; struct child_process chld; + int i; int fd = open(PATCH_FILE, O_WRONLY | O_CREAT, 0666); if (fd < 0) return; @@ -34,20 +35,22 @@ static void make_patch(struct commit *commit) args[2] = xstrdup(sha1_to_hex(parents->item->object.sha1)); args[3] = xstrdup(sha1_to_hex(((struct object *)commit)->sha1)); } else { - int i = 0; int count = 1; for (; parents; parents = parents->next) ++count; + + i = 0; args = xcalloc(count + 3, sizeof(char *)); args[i++] = "diff"; args[i++] = "--cc"; args[i++] = xstrdup(sha1_to_hex(commit->object.sha1)); for (parents = commit->parents; parents; - parents = parents->next) - args[i++] = xstrdup(sha1_to_hex( - parents->item->object.sha1)); + parents = parents->next) { + char *hex = sha1_to_hex(parents->item->object.sha1); + args[i++] = xstrdup(hex); + } } chld.argv = args; @@ -55,11 +58,12 @@ static void make_patch(struct commit *commit) chld.out = fd; /* Run, ignore errors. */ - if (start_command(&chld)) - return; - finish_command(&chld); + if (!start_command(&chld)) + finish_command(&chld); - /* TODO: free dup'ed SHAs in argument list */ + for (i = 2; args[i]; i++) + free((char *)args[i]); + free(args); } /* Return a commit object of "arg" */ -- 1.6.3.GIT