aboutsummaryrefslogtreecommitdiffstats
path: root/include/asterisk/linkedlists.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asterisk/linkedlists.h')
-rw-r--r--include/asterisk/linkedlists.h32
1 files changed, 28 insertions, 4 deletions
diff --git a/include/asterisk/linkedlists.h b/include/asterisk/linkedlists.h
index 3c89e7117..d35cfad3e 100644
--- a/include/asterisk/linkedlists.h
+++ b/include/asterisk/linkedlists.h
@@ -744,13 +744,37 @@ struct { \
#define AST_RWLIST_APPEND_LIST AST_LIST_APPEND_LIST
/*!
- \brief Removes and returns the head entry from a list.
+ \brief Inserts a whole list after a specific entry in a list
\param head This is a pointer to the list head structure
+ \param list This is a pointer to the list to be inserted.
+ \param elm This is a pointer to the entry after which the new list should
+ be inserted.
\param field This is the name of the field (declared using AST_LIST_ENTRY())
- used to link entries of this list together.
+ used to link entries of the lists together.
- Removes the head entry from the list, and returns a pointer to it.
- This macro is safe to call on an empty list.
+ Note: The source list (the \a list parameter) will be empty after
+ calling this macro (the list entries are \b moved to the target list).
+ */
+#define AST_LIST_INSERT_LIST_AFTER(head, list, elm, field) do { \
+ (list)->last->field.next = (elm)->field.next; \
+ (elm)->field.next = (list)->first; \
+ if ((head)->last == elm) { \
+ (head)->last = (list)->last; \
+ } \
+ (list)->first = NULL; \
+ (list)->last = NULL; \
+} while(0)
+
+#define AST_RWLIST_INSERT_LIST_AFTER AST_LIST_INSERT_LIST_AFTER
+
+/*!
+ * \brief Removes and returns the head entry from a list.
+ * \param head This is a pointer to the list head structure
+ * \param field This is the name of the field (declared using AST_LIST_ENTRY())
+ * used to link entries of this list together.
+ *
+ * Removes the head entry from the list, and returns a pointer to it.
+ * This macro is safe to call on an empty list.
*/
#define AST_LIST_REMOVE_HEAD(head, field) ({ \
typeof((head)->first) cur = (head)->first; \