As the QLIST has not tail pointer, this requires list walking. Still
useful when lists are short or insertion time doesn't matter.

Signed-off-by: Jan Kiszka <jan.kis...@siemens.com>
---
 qemu-queue.h |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/qemu-queue.h b/qemu-queue.h
index 1d07745..99ed1f6 100644
--- a/qemu-queue.h
+++ b/qemu-queue.h
@@ -122,6 +122,15 @@ struct {                                                   
             \
         (elm)->field.le_prev = &(head)->lh_first;                       \
 } while (/*CONSTCOND*/0)
 
+#define QLIST_INSERT_TAIL(head, elm, field) do {                        \
+        typeof((head)->lh_first) *qlist_lastptr = &(head)->lh_first;    \
+        while (*qlist_lastptr)                                          \
+            qlist_lastptr = &(*qlist_lastptr)->field.le_next;           \
+        (elm)->field.le_next = NULL;                                    \
+        *qlist_lastptr = (elm);                                         \
+        (elm)->field.le_prev = qlist_lastptr;                           \
+} while (/*CONSTCOND*/0)
+
 #define QLIST_REMOVE(elm, field) do {                                   \
         if ((elm)->field.le_next != NULL)                               \
                 (elm)->field.le_next->field.le_prev =                   \
-- 
1.6.0.2


Reply via email to