summaryrefslogtreecommitdiffstats
path: root/lib/atomlist.h
diff options
context:
space:
mode:
authorStephen Worley <sworley@cumulusnetworks.com>2019-07-23 18:23:25 +0200
committerStephen Worley <sworley@cumulusnetworks.com>2019-07-31 17:35:21 +0200
commitda098d78bb6fbdfb62444f0b0a7aac86875bf3c3 (patch)
tree0d8121f06ed024857287880c5c68957184b1b3a7 /lib/atomlist.h
parentMerge pull request #4756 from vincentbernat/fix/doc-aspath (diff)
downloadfrr-da098d78bb6fbdfb62444f0b0a7aac86875bf3c3.tar.xz
frr-da098d78bb6fbdfb62444f0b0a7aac86875bf3c3.zip
lib: Impelement the `*_del` list API.
The new list api did not implement the `*_del` endpoint as it was described in the docs here: http://docs.frrouting.org/projects/dev-guide/en/latest/lists.html#c.Z_del This patch implements the endpoints to return the object deleted if found, otherwise NULL for all but the atomic lists. The atomic list `*_del` code is marked as TODO and will remain undefined for now. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
Diffstat (limited to 'lib/atomlist.h')
-rw-r--r--lib/atomlist.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/atomlist.h b/lib/atomlist.h
index e4098ccb5..621db6824 100644
--- a/lib/atomlist.h
+++ b/lib/atomlist.h
@@ -135,8 +135,10 @@ macro_inline void prefix ## _add_tail(struct prefix##_head *h, type *item) \
macro_inline void prefix ## _del_hint(struct prefix##_head *h, type *item, \
_Atomic atomptr_t *hint) \
{ atomlist_del_hint(&h->ah, &item->field.ai, hint); } \
-macro_inline void prefix ## _del(struct prefix##_head *h, type *item) \
-{ atomlist_del_hint(&h->ah, &item->field.ai, NULL); } \
+macro_inline type *prefix ## _del(struct prefix##_head *h, type *item) \
+{ atomlist_del_hint(&h->ah, &item->field.ai, NULL); \
+ /* TODO: Return NULL if not found */ \
+ return item; } \
macro_inline type *prefix ## _pop(struct prefix##_head *h) \
{ char *p = (char *)atomlist_pop(&h->ah); \
return p ? (type *)(p - offsetof(type, field)) : NULL; } \
@@ -273,9 +275,11 @@ macro_inline void prefix ## _del_hint(struct prefix##_head *h, type *item, \
{ \
atomsort_del_hint(&h->ah, &item->field.ai, hint); \
} \
-macro_inline void prefix ## _del(struct prefix##_head *h, type *item) \
+macro_inline type *prefix ## _del(struct prefix##_head *h, type *item) \
{ \
atomsort_del_hint(&h->ah, &item->field.ai, NULL); \
+ /* TODO: Return NULL if not found */ \
+ return item; \
} \
macro_inline size_t prefix ## _count(struct prefix##_head *h) \
{ \