aboutsummaryrefslogtreecommitdiffstats
path: root/merge-ort.c
diff options
context:
space:
mode:
authorElijah Newren <newren@gmail.com>2021-07-30 11:47:41 +0000
committerJunio C Hamano <gitster@pobox.com>2021-07-30 09:01:19 -0700
commita8791ef6492bf702ba70352009cbd28fb581c6e2 (patch)
tree069fb2c73de4a9df8c8f0b973169e60f151ccab3 /merge-ort.c
parent6697ee01b5d31df5c83ace9eabb6285cf42ff172 (diff)
downloadgit-a8791ef6492bf702ba70352009cbd28fb581c6e2.tar.gz
diffcore-rename, merge-ort: add wrapper functions for filepair alloc/dealloc
We want to be able to allocate filespecs and filepairs using a mem_pool. However, filespec data will still remain outside the pool (perhaps in the future we could plumb the pool through the various diff APIs to allocate the filespec data too, but for now we are limiting the scope). Add some extra functions to allocate these appropriately based on the non-NULL-ness of opt->priv->pool, as well as some extra functions to handle correctly deallocating the relevant parts of them. A future commit will make use of these new functions. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'merge-ort.c')
-rw-r--r--merge-ort.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/merge-ort.c b/merge-ort.c
index 99c7569085..e79830f918 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -690,6 +690,48 @@ static void path_msg(struct merge_options *opt,
strbuf_addch(sb, '\n');
}
+MAYBE_UNUSED
+static struct diff_filespec *pool_alloc_filespec(struct mem_pool *pool,
+ const char *path)
+{
+ struct diff_filespec *spec;
+ size_t len;
+
+ if (!pool)
+ return alloc_filespec(path);
+
+ /* Same code as alloc_filespec, except allocate from pool */
+ len = strlen(path);
+
+ spec = mem_pool_calloc(pool, 1, st_add3(sizeof(*spec), len, 1));
+ memcpy(spec+1, path, len);
+ spec->path = (void*)(spec+1);
+
+ spec->count = 1;
+ spec->is_binary = -1;
+ return spec;
+}
+
+MAYBE_UNUSED
+static struct diff_filepair *pool_diff_queue(struct mem_pool *pool,
+ struct diff_queue_struct *queue,
+ struct diff_filespec *one,
+ struct diff_filespec *two)
+{
+ struct diff_filepair *dp;
+
+ if (!pool)
+ return diff_queue(queue, one, two);
+
+ /* Same code as diff_queue, except allocate from pool */
+ dp = mem_pool_calloc(pool, 1, sizeof(*dp));
+ dp->one = one;
+ dp->two = two;
+ if (queue)
+ diff_q(queue, dp);
+ return dp;
+}
+
static void *pool_calloc(struct mem_pool *pool, size_t count, size_t size)
{
if (!pool)