[PATCH 02/12] Introduce diff_free_filepair() funcion.
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:41:58
Subsystem:
the rest · Maintainer:
Linus Torvalds
This introduces a new function to free a common data structure, and plugs some leaks. Signed-off-by: Junio C Hamano <redacted> --- diff.c | 15 +++++++++------ diffcore-pathspec.c | 2 +- diffcore-pickaxe.c | 2 +- diffcore-rename.c | 7 ++----- diffcore.h | 2 ++ 5 files changed, 15 insertions(+), 13 deletions(-)
diff --git a/diff.c b/diff.c
--- a/diff.c
+++ b/diff.c@@ -521,6 +521,13 @@ struct diff_filepair *diff_queue(struct return dp; } +void diff_free_filepair(struct diff_filepair *p) +{ + diff_free_filespec_data(p->one); + diff_free_filespec_data(p->two); + free(p); +} + static void diff_flush_raw(struct diff_filepair *p, int line_termination, int inter_name_termination)
@@ -817,12 +824,8 @@ void diff_flush(int diff_output_style, i break; } } - for (i = 0; i < q->nr; i++) { - struct diff_filepair *p = q->queue[i]; - diff_free_filespec_data(p->one); - diff_free_filespec_data(p->two); - free(p); - } + for (i = 0; i < q->nr; i++) + diff_free_filepair(q->queue[i]); free(q->queue); q->queue = NULL; q->nr = q->alloc = 0;
diff --git a/diffcore-pathspec.c b/diffcore-pathspec.c
--- a/diffcore-pathspec.c
+++ b/diffcore-pathspec.c@@ -59,7 +59,7 @@ void diffcore_pathspec(const char **path matches_pathspec(p->two->path, spec, speccnt)) diff_q(&outq, p); else - free(p); + diff_free_filepair(p); } free(q->queue); *q = outq;
diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c
--- a/diffcore-pickaxe.c
+++ b/diffcore-pickaxe.c@@ -49,7 +49,7 @@ void diffcore_pickaxe(const char *needle contains(p->two, needle, len)) diff_q(&outq, p); if (onum == outq.nr) - free(p); + diff_free_filepair(p); } free(q->queue); *q = outq;
diff --git a/diffcore-rename.c b/diffcore-rename.c
--- a/diffcore-rename.c
+++ b/diffcore-rename.c@@ -361,11 +361,8 @@ void diffcore_rename(int detect_rename, else pair_to_free = p; } - if (pair_to_free) { - diff_free_filespec_data(pair_to_free->one); - diff_free_filespec_data(pair_to_free->two); - free(pair_to_free); - } + if (pair_to_free) + diff_free_filepair(pair_to_free); } diff_debug_queue("done copying original", &outq);
diff --git a/diffcore.h b/diffcore.h
--- a/diffcore.h
+++ b/diffcore.h@@ -54,6 +54,8 @@ struct diff_filepair { (S_ISREG(mode) ? (S_IFREG | ce_permissions(mode)) : \ S_ISLNK(mode) ? S_IFLNK : S_IFDIR) +extern void diff_free_filepair(struct diff_filepair *); + extern int diff_unmodified_pair(struct diff_filepair *); struct diff_queue_struct { ------------------------------------------------