Add new nl_cache_clone() function.
The function can be used to make a copy of an existing cache. It is very similar to nl_cache_subset() except that it allows no filtering but copies every object. Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de> Signed-off-by: Thomas Graf <tgraf@redhat.com>
This commit is contained in:
parent
a17970b974
commit
0b40364150
2 changed files with 31 additions and 0 deletions
|
@ -44,6 +44,7 @@ extern int nl_cache_alloc_name(const char *,
|
|||
struct nl_cache **);
|
||||
extern struct nl_cache * nl_cache_subset(struct nl_cache *,
|
||||
struct nl_object *);
|
||||
extern struct nl_cache * nl_cache_clone(struct nl_cache *);
|
||||
extern void nl_cache_clear(struct nl_cache *);
|
||||
extern void nl_cache_free(struct nl_cache *);
|
||||
|
||||
|
|
30
lib/cache.c
30
lib/cache.c
|
@ -287,6 +287,36 @@ struct nl_cache *nl_cache_subset(struct nl_cache *orig,
|
|||
return cache;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate new cache and copy the contents of an existing cache
|
||||
* @arg cache Original cache to base new cache on
|
||||
*
|
||||
* Allocates a new cache matching the type of the cache specified by
|
||||
* \p cache. Iterates over the \p cache cache and copies all objects
|
||||
* to the new cache.
|
||||
*
|
||||
* The copied objects are clones but do not contain a reference to each
|
||||
* other. Later modifications to objects in the original cache will
|
||||
* not affect objects in the new cache.
|
||||
*
|
||||
* @return A newly allocated cache or NULL.
|
||||
*/
|
||||
struct nl_cache *nl_cache_clone(struct nl_cache *cache)
|
||||
{
|
||||
struct nl_cache_ops *ops = nl_cache_get_ops(cache);
|
||||
struct nl_cache *clone;
|
||||
struct nl_object *obj;
|
||||
|
||||
clone = nl_cache_alloc(ops);
|
||||
if (!clone)
|
||||
return NULL;
|
||||
|
||||
nl_list_for_each_entry(obj, &cache->c_items, ce_list)
|
||||
nl_cache_add(clone, obj);
|
||||
|
||||
return clone;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove all objects of a cache.
|
||||
* @arg cache Cache to clear
|
||||
|
|
Loading…
Add table
Reference in a new issue