yann@1625: grab some updates from FreeBSD yann@1625: yann@1625: http://bugs.gentoo.org/201979 yann@1625: yann@1625: diff -durN glibc-2.10.1.orig/misc/sys/queue.h glibc-2.10.1/misc/sys/queue.h yann@1625: yann@1625: diff -durN glibc-2.10.1.orig/misc/sys/queue.h glibc-2.10.1/misc/sys/queue.h yann@1625: --- glibc-2.10.1.orig/misc/sys/queue.h 2008-03-05 06:50:30.000000000 +0100 yann@1625: +++ glibc-2.10.1/misc/sys/queue.h 2009-11-13 00:49:51.000000000 +0100 yann@1625: @@ -136,6 +136,11 @@ yann@1625: (var); \ yann@1625: (var) = ((var)->field.le_next)) yann@1625: yann@1625: +#define LIST_FOREACH_SAFE(var, head, field, tvar) \ yann@1625: + for ((var) = LIST_FIRST((head)); \ yann@1625: + (var) && ((tvar) = LIST_NEXT((var), field), 1); \ yann@1625: + (var) = (tvar)) yann@1625: + yann@1625: /* yann@1625: * List access methods. yann@1625: */ yann@1625: @@ -197,6 +202,16 @@ yann@1625: #define SLIST_FOREACH(var, head, field) \ yann@1625: for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next) yann@1625: yann@1625: +#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ yann@1625: + for ((var) = SLIST_FIRST((head)); \ yann@1625: + (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ yann@1625: + (var) = (tvar)) yann@1625: + yann@1625: +#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \ yann@1625: + for ((varp) = &SLIST_FIRST((head)); \ yann@1625: + ((var) = *(varp)) != NULL; \ yann@1625: + (varp) = &SLIST_NEXT((var), field)) yann@1625: + yann@1625: /* yann@1625: * Singly-linked List access methods. yann@1625: */ yann@1625: @@ -242,6 +257,12 @@ yann@1625: (head)->stqh_last = &(elm)->field.stqe_next; \ yann@1625: } while (/*CONSTCOND*/0) yann@1625: yann@1625: +#define STAILQ_LAST(head, type, field) \ yann@1625: + (STAILQ_EMPTY((head)) ? \ yann@1625: + NULL : \ yann@1625: + ((struct type *)(void *) \ yann@1625: + ((char *)((head)->stqh_last) - __offsetof(struct type, field)))) yann@1625: + yann@1625: #define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ yann@1625: if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\ yann@1625: (head)->stqh_last = &(elm)->field.stqe_next; \ yann@1625: @@ -271,6 +292,11 @@ yann@1625: (var); \ yann@1625: (var) = ((var)->field.stqe_next)) yann@1625: yann@1625: +#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ yann@1625: + for ((var) = STAILQ_FIRST((head)); \ yann@1625: + (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ yann@1625: + (var) = (tvar)) yann@1625: + yann@1625: #define STAILQ_CONCAT(head1, head2) do { \ yann@1625: if (!STAILQ_EMPTY((head2))) { \ yann@1625: *(head1)->stqh_last = (head2)->stqh_first; \ yann@1625: @@ -437,11 +463,21 @@ yann@1625: (var); \ yann@1625: (var) = ((var)->field.tqe_next)) yann@1625: ilya@2169: +#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ yann@1625: + for ((var) = TAILQ_FIRST((head)); \ yann@1625: + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ yann@1625: + (var) = (tvar)) yann@1625: + yann@1625: #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ yann@1625: for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last)); \ yann@1625: (var); \ yann@1625: (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last))) yann@1625: yann@1625: +#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ yann@1625: + for ((var) = TAILQ_LAST((head), headname); \ yann@1625: + (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \ yann@1625: + (var) = (tvar)) yann@1625: + yann@1625: #define TAILQ_CONCAT(head1, head2, field) do { \ yann@1625: if (!TAILQ_EMPTY(head2)) { \ yann@1625: *(head1)->tqh_last = (head2)->tqh_first; \