diff options
author | Derrick Stolee <derrickstolee@github.com> | 2022-03-09 19:01:32 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-03-09 21:25:26 +0300 |
commit | 4a4c3f9b6389168033843814ad45e69bf0b92b1d (patch) | |
tree | 989ea55d1a3077f9f1d4200cf7eaec2e467a34d8 /list-objects-filter-options.c | |
parent | 1f52cdfacb6af203cdcc6a5101fc8cb5fff72735 (diff) |
list-objects-filter-options: create copy helper
As we add more embedded members with type 'struct
list_objects_filter_options', it will be important to easily perform a
deep copy across multiple such structs. Create
list_objects_filter_copy() to satisfy this need.
This method is recursive to match the recursive nature of the struct.
Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'list-objects-filter-options.c')
-rw-r--r-- | list-objects-filter-options.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/list-objects-filter-options.c b/list-objects-filter-options.c index fd8d59f653..449d53af69 100644 --- a/list-objects-filter-options.c +++ b/list-objects-filter-options.c @@ -415,3 +415,22 @@ void partial_clone_get_default_filter_spec( &errbuf); strbuf_release(&errbuf); } + +void list_objects_filter_copy( + struct list_objects_filter_options *dest, + const struct list_objects_filter_options *src) +{ + int i; + struct string_list_item *item; + + /* Copy everything. We will overwrite the pointers shortly. */ + memcpy(dest, src, sizeof(struct list_objects_filter_options)); + + string_list_init_dup(&dest->filter_spec); + for_each_string_list_item(item, &src->filter_spec) + string_list_append(&dest->filter_spec, item->string); + + ALLOC_ARRAY(dest->sub, dest->sub_alloc); + for (i = 0; i < src->sub_nr; i++) + list_objects_filter_copy(&dest->sub[i], &src->sub[i]); +} |