From patchwork Fri May 14 13:20:51 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [7/8] Add QLIST_INSERT_TAIL X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 52609 Message-Id: <3e4c0272ca8046d7fc893c2bf76d6e7c2f5b4690.1273843151.git.jan.kiszka@siemens.com> To: qemu-devel@nongnu.org, Anthony Liguori Cc: Avi Kivity , Juan Quintela , Markus Armbruster , Luiz Capitulino Date: Fri, 14 May 2010 15:20:51 +0200 From: Jan Kiszka List-Id: qemu-devel.nongnu.org 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 --- 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 = \