Skip to content

Commit

Permalink
diff_flush(): leakfix.
Browse files Browse the repository at this point in the history
We were leaking filepairs when output-format was set to
NO_OUTPUT.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Apr 5, 2006
1 parent fa0cdab commit 7d6c447
Showing 1 changed file with 25 additions and 19 deletions.
44 changes: 25 additions & 19 deletions diff.c
Expand Up @@ -1225,28 +1225,34 @@ void diff_flush(struct diff_options *options)

for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
if ((diff_output_format == DIFF_FORMAT_NO_OUTPUT) ||
(p->status == DIFF_STATUS_UNKNOWN))
continue;
if (p->status == 0)
die("internal error in diff-resolve-rename-copy");
switch (diff_output_format) {
case DIFF_FORMAT_PATCH:
diff_flush_patch(p, options);
break;
case DIFF_FORMAT_RAW:
case DIFF_FORMAT_NAME_STATUS:
diff_flush_raw(p, line_termination,
inter_name_termination,
options);

switch (p->status) {
case DIFF_STATUS_UNKNOWN:
break;
case DIFF_FORMAT_NAME:
diff_flush_name(p,
inter_name_termination,
line_termination);
case 0:
die("internal error in diff-resolve-rename-copy");
break;
default:
switch (diff_output_format) {
case DIFF_FORMAT_PATCH:
diff_flush_patch(p, options);
break;
case DIFF_FORMAT_RAW:
case DIFF_FORMAT_NAME_STATUS:
diff_flush_raw(p, line_termination,
inter_name_termination,
options);
break;
case DIFF_FORMAT_NAME:
diff_flush_name(p,
inter_name_termination,
line_termination);
break;
case DIFF_FORMAT_NO_OUTPUT:
break;
}
}
diff_free_filepair(q->queue[i]);
diff_free_filepair(p);
}
free(q->queue);
q->queue = NULL;
Expand Down

0 comments on commit 7d6c447

Please sign in to comment.