1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/patches/glibc/ports-2.12.1/150-queue-header-updates.patch Sun Jul 03 22:32:36 2011 +0200
1.3 @@ -0,0 +1,85 @@
1.4 +grab some updates from FreeBSD
1.5 +
1.6 +http://bugs.gentoo.org/201979
1.7 +
1.8 +diff -durN glibc-2.12.1.orig/misc/sys/queue.h glibc-2.12.1/misc/sys/queue.h
1.9 +
1.10 +diff -durN glibc-2.12.1.orig/misc/sys/queue.h glibc-2.12.1/misc/sys/queue.h
1.11 +--- glibc-2.12.1.orig/misc/sys/queue.h 2008-03-05 06:50:30.000000000 +0100
1.12 ++++ glibc-2.12.1/misc/sys/queue.h 2009-11-13 00:49:51.000000000 +0100
1.13 +@@ -136,6 +136,11 @@
1.14 + (var); \
1.15 + (var) = ((var)->field.le_next))
1.16 +
1.17 ++#define LIST_FOREACH_SAFE(var, head, field, tvar) \
1.18 ++ for ((var) = LIST_FIRST((head)); \
1.19 ++ (var) && ((tvar) = LIST_NEXT((var), field), 1); \
1.20 ++ (var) = (tvar))
1.21 ++
1.22 + /*
1.23 + * List access methods.
1.24 + */
1.25 +@@ -197,6 +202,16 @@
1.26 + #define SLIST_FOREACH(var, head, field) \
1.27 + for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
1.28 +
1.29 ++#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
1.30 ++ for ((var) = SLIST_FIRST((head)); \
1.31 ++ (var) && ((tvar) = SLIST_NEXT((var), field), 1); \
1.32 ++ (var) = (tvar))
1.33 ++
1.34 ++#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
1.35 ++ for ((varp) = &SLIST_FIRST((head)); \
1.36 ++ ((var) = *(varp)) != NULL; \
1.37 ++ (varp) = &SLIST_NEXT((var), field))
1.38 ++
1.39 + /*
1.40 + * Singly-linked List access methods.
1.41 + */
1.42 +@@ -242,6 +257,12 @@
1.43 + (head)->stqh_last = &(elm)->field.stqe_next; \
1.44 + } while (/*CONSTCOND*/0)
1.45 +
1.46 ++#define STAILQ_LAST(head, type, field) \
1.47 ++ (STAILQ_EMPTY((head)) ? \
1.48 ++ NULL : \
1.49 ++ ((struct type *)(void *) \
1.50 ++ ((char *)((head)->stqh_last) - __offsetof(struct type, field))))
1.51 ++
1.52 + #define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
1.53 + if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\
1.54 + (head)->stqh_last = &(elm)->field.stqe_next; \
1.55 +@@ -271,6 +292,11 @@
1.56 + (var); \
1.57 + (var) = ((var)->field.stqe_next))
1.58 +
1.59 ++#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
1.60 ++ for ((var) = STAILQ_FIRST((head)); \
1.61 ++ (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
1.62 ++ (var) = (tvar))
1.63 ++
1.64 + #define STAILQ_CONCAT(head1, head2) do { \
1.65 + if (!STAILQ_EMPTY((head2))) { \
1.66 + *(head1)->stqh_last = (head2)->stqh_first; \
1.67 +@@ -437,11 +463,21 @@
1.68 + (var); \
1.69 + (var) = ((var)->field.tqe_next))
1.70 +
1.71 ++#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
1.72 ++ for ((var) = TAILQ_FIRST((head)); \
1.73 ++ (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
1.74 ++ (var) = (tvar))
1.75 ++
1.76 + #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
1.77 + for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last)); \
1.78 + (var); \
1.79 + (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last)))
1.80 +
1.81 ++#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
1.82 ++ for ((var) = TAILQ_LAST((head), headname); \
1.83 ++ (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
1.84 ++ (var) = (tvar))
1.85 ++
1.86 + #define TAILQ_CONCAT(head1, head2, field) do { \
1.87 + if (!TAILQ_EMPTY(head2)) { \
1.88 + *(head1)->tqh_last = (head2)->tqh_first; \