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