Browse Source

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>
maint
Derrick Stolee 3 years ago committed by Junio C Hamano
parent
commit
4a4c3f9b63
  1. 19
      list-objects-filter-options.c
  2. 4
      list-objects-filter-options.h

19
list-objects-filter-options.c

@ -415,3 +415,22 @@ void partial_clone_get_default_filter_spec( @@ -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]);
}

4
list-objects-filter-options.h

@ -132,4 +132,8 @@ void partial_clone_get_default_filter_spec( @@ -132,4 +132,8 @@ void partial_clone_get_default_filter_spec(
struct list_objects_filter_options *filter_options,
const char *remote);

void list_objects_filter_copy(
struct list_objects_filter_options *dest,
const struct list_objects_filter_options *src);

#endif /* LIST_OBJECTS_FILTER_OPTIONS_H */

Loading…
Cancel
Save