summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-08-17 11:19:35 +0200
committerThomas Haller <thaller@redhat.com>2021-08-17 19:56:38 +0200
commit9c99c948fd8c3c72b09d8de56f5424ef32061794 (patch)
tree280568a6ef363038edc7e6b1c83875c27f3c841f
parent53070705b0f033aed4c7891b7e0eb19534c1c8d7 (diff)
downloadNetworkManager-9c99c948fd8c3c72b09d8de56f5424ef32061794.tar.gz
platform: add nmp_cache_iter_for_each_reverse() helper
-rw-r--r--.clang-format1
-rw-r--r--src/libnm-platform/nmp-object.h15
2 files changed, 16 insertions, 0 deletions
diff --git a/.clang-format b/.clang-format
index ebb662e482..110ff05f23 100644
--- a/.clang-format
+++ b/.clang-format
@@ -120,4 +120,5 @@ ForEachMacros: ['c_list_for_each',
'nm_platform_iter_obj_for_each',
'nmp_cache_iter_for_each',
'nmp_cache_iter_for_each_link',
+ 'nmp_cache_iter_for_each_reverse',
]
diff --git a/src/libnm-platform/nmp-object.h b/src/libnm-platform/nmp-object.h
index e3e101eef3..021829db4b 100644
--- a/src/libnm-platform/nmp-object.h
+++ b/src/libnm-platform/nmp-object.h
@@ -778,6 +778,18 @@ nmp_cache_iter_next(NMDedupMultiIter *iter, const NMPObject **out_obj)
}
static inline gboolean
+nmp_cache_iter_prev(NMDedupMultiIter *iter, const NMPObject **out_obj)
+{
+ gboolean has_prev;
+
+ has_prev = nm_dedup_multi_iter_prev(iter);
+ nm_assert(!has_prev || NMP_OBJECT_IS_VALID(iter->current->obj));
+ if (out_obj)
+ *out_obj = has_prev ? iter->current->obj : NULL;
+ return has_prev;
+}
+
+static inline gboolean
nmp_cache_iter_next_link(NMDedupMultiIter *iter, const NMPlatformLink **out_obj)
{
gboolean has_next;
@@ -792,6 +804,9 @@ nmp_cache_iter_next_link(NMDedupMultiIter *iter, const NMPlatformLink **out_obj)
#define nmp_cache_iter_for_each(iter, head, obj) \
for (nm_dedup_multi_iter_init((iter), (head)); nmp_cache_iter_next((iter), (obj));)
+#define nmp_cache_iter_for_each_reverse(iter, head, obj) \
+ for (nm_dedup_multi_iter_init_reverse((iter), (head)); nmp_cache_iter_prev((iter), (obj));)
+
#define nmp_cache_iter_for_each_link(iter, head, obj) \
for (nm_dedup_multi_iter_init((iter), (head)); nmp_cache_iter_next_link((iter), (obj));)