Add TAILQ_FOREACH_SAFE (Jan Kiszka)
authoraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>
Tue, 25 Nov 2008 22:05:37 +0000 (22:05 +0000)
committeraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>
Tue, 25 Nov 2008 22:05:37 +0000 (22:05 +0000)
Add TAILQ iterator that allows to safely remove elements while walking
the list.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5798 c046a42c-6fe2-441c-8c8c-71466251a162

sys-queue.h

index 3d0773e..ad5c8fb 100644 (file)
@@ -210,6 +210,11 @@ struct {                                                                \
                 (var);                                                  \\r
                 (var) = ((var)->field.tqe_next))\r
 \r
+#define TAILQ_FOREACH_SAFE(var, head, field, next_var)                  \\r
+        for ((var) = ((head)->tqh_first);                               \\r
+                (var) && ((next_var) = ((var)->field.tqe_next), 1);     \\r
+                (var) = (next_var))\r
+\r
 #define TAILQ_FOREACH_REVERSE(var, head, headname, field)               \\r
         for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last));    \\r
                 (var);                                                  \\r