diff --git a/shared/nm-utils/nm-dedup-multi.c b/shared/nm-utils/nm-dedup-multi.c index 6a276ae4f1..92dba89936 100644 --- a/shared/nm-utils/nm-dedup-multi.c +++ b/shared/nm-utils/nm-dedup-multi.c @@ -931,6 +931,34 @@ nm_dedup_multi_obj_clone (const NMDedupMultiObj *obj) return o; } +GPtrArray * +nm_dedup_multi_objs_to_ptr_array_head (const NMDedupMultiHeadEntry *head_entry, + NMDedupMultiFcnSelectPredicate predicate, + gpointer user_data) +{ + GPtrArray *result; + NMDedupMultiIter iter; + + if (!head_entry) + return NULL; + + result = g_ptr_array_new_full (head_entry->len, + (GDestroyNotify) nm_dedup_multi_obj_unref); + nm_dedup_multi_iter_for_each (&iter, head_entry) { + const NMDedupMultiObj *obj = iter.current->obj; + + if ( !predicate + || predicate (obj, user_data)) + g_ptr_array_add (result, (gpointer) nm_dedup_multi_obj_ref (obj)); + } + + if (result->len == 0) { + g_ptr_array_unref (result); + return NULL; + } + return result; +} + /*****************************************************************************/ NMDedupMultiIndex * diff --git a/shared/nm-utils/nm-dedup-multi.h b/shared/nm-utils/nm-dedup-multi.h index 090cc743a0..77a2fd122d 100644 --- a/shared/nm-utils/nm-dedup-multi.h +++ b/shared/nm-utils/nm-dedup-multi.h @@ -360,6 +360,20 @@ nm_dedup_multi_iter_rewind (NMDedupMultiIter *iter) nm_dedup_multi_iter_init (iter, iter->head); } +#define nm_dedup_multi_iter_for_each(iter, head_entry) \ + for (nm_dedup_multi_iter_init ((iter), (head_entry)); \ + nm_dedup_multi_iter_next ((iter)); \ + ) + +/*****************************************************************************/ + +typedef gboolean (*NMDedupMultiFcnSelectPredicate) (/* const NMDedupMultiObj * */ gconstpointer obj, + gpointer user_data); + +GPtrArray *nm_dedup_multi_objs_to_ptr_array_head (const NMDedupMultiHeadEntry *head_entry, + NMDedupMultiFcnSelectPredicate predicate, + gpointer user_data); + /*****************************************************************************/ #endif /* __NM_DEDUP_MULTI_H__ */ diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index c8008216b2..de5ac3cf40 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -2692,29 +2692,9 @@ nm_platform_lookup_clone (NMPlatform *platform, gboolean (*predicate) (const NMPObject *obj, gpointer user_data), gpointer user_data) { - const NMDedupMultiHeadEntry *head_entry; - GPtrArray *result; - NMDedupMultiIter iter; - const NMPObject *plobj = NULL; - - head_entry = nm_platform_lookup (platform, lookup); - if (!head_entry) - return NULL; - - result = g_ptr_array_new_full (head_entry->len, - (GDestroyNotify) nmp_object_unref); - nmp_cache_iter_for_each (&iter, head_entry, &plobj) { - if ( predicate - && !predicate (plobj, user_data)) - continue; - g_ptr_array_add (result, (gpointer) nmp_object_ref (plobj)); - } - - if (result->len == 0) { - g_ptr_array_unref (result); - return NULL; - } - return result; + return nm_dedup_multi_objs_to_ptr_array_head (nm_platform_lookup (platform, lookup), + (NMDedupMultiFcnSelectPredicate) predicate, + user_data); } void