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>
This commit is contained in:

committed by
Junio C Hamano

parent
6697ee01b5
commit
a8791ef649
@ -1328,6 +1328,47 @@ static void handle_early_known_dir_renames(struct dir_rename_info *info,
|
||||
rename_src_nr = new_num_src;
|
||||
}
|
||||
|
||||
static void free_filespec_data(struct diff_filespec *spec)
|
||||
{
|
||||
if (!--spec->count)
|
||||
diff_free_filespec_data(spec);
|
||||
}
|
||||
|
||||
MAYBE_UNUSED
|
||||
static void pool_free_filespec(struct mem_pool *pool,
|
||||
struct diff_filespec *spec)
|
||||
{
|
||||
if (!pool) {
|
||||
free_filespec(spec);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Similar to free_filespec(), but only frees the data. The spec
|
||||
* itself was allocated in the pool and should not be individually
|
||||
* freed.
|
||||
*/
|
||||
free_filespec_data(spec);
|
||||
}
|
||||
|
||||
MAYBE_UNUSED
|
||||
void pool_diff_free_filepair(struct mem_pool *pool,
|
||||
struct diff_filepair *p)
|
||||
{
|
||||
if (!pool) {
|
||||
diff_free_filepair(p);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Similar to diff_free_filepair() but only frees the data from the
|
||||
* filespecs; not the filespecs or the filepair which were
|
||||
* allocated from the pool.
|
||||
*/
|
||||
free_filespec_data(p->one);
|
||||
free_filespec_data(p->two);
|
||||
}
|
||||
|
||||
void diffcore_rename_extended(struct diff_options *options,
|
||||
struct strintmap *relevant_sources,
|
||||
struct strintmap *dirs_removed,
|
||||
|
Reference in New Issue
Block a user