patches/glibc/ports-2.13/150-queue-header-updates.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue May 03 00:19:56 2011 +0200 (2011-05-03)
changeset 2438 2ba5655f6297
permissions -rw-r--r--
libc/glibc: add 2.13

Patchset provided by "Ioannis E. Venetis" <venetis@mail.capsl.udel.edu>
http://sourceware.org/ml/crossgcc/2011-04/msg00072.html
http://sourceware.org/ml/crossgcc/2011-04/msg00073.html

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@2438
     1
grab some updates from FreeBSD
yann@2438
     2
yann@2438
     3
http://bugs.gentoo.org/201979
yann@2438
     4
yann@2438
     5
diff -durN glibc-2.13.orig/misc/sys/queue.h glibc-2.13/misc/sys/queue.h
yann@2438
     6
yann@2438
     7
diff -durN glibc-2.13.orig/misc/sys/queue.h glibc-2.13/misc/sys/queue.h
yann@2438
     8
--- glibc-2.13.orig/misc/sys/queue.h	2008-03-05 06:50:30.000000000 +0100
yann@2438
     9
+++ glibc-2.13/misc/sys/queue.h	2009-11-13 00:49:51.000000000 +0100
yann@2438
    10
@@ -136,6 +136,11 @@
yann@2438
    11
 		(var);							\
yann@2438
    12
 		(var) = ((var)->field.le_next))
yann@2438
    13
 
yann@2438
    14
+#define	LIST_FOREACH_SAFE(var, head, field, tvar)			\
yann@2438
    15
+	for ((var) = LIST_FIRST((head));				\
yann@2438
    16
+	    (var) && ((tvar) = LIST_NEXT((var), field), 1);		\
yann@2438
    17
+	    (var) = (tvar))
yann@2438
    18
+
yann@2438
    19
 /*
yann@2438
    20
  * List access methods.
yann@2438
    21
  */
yann@2438
    22
@@ -197,6 +202,16 @@
yann@2438
    23
 #define	SLIST_FOREACH(var, head, field)					\
yann@2438
    24
 	for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
yann@2438
    25
 
yann@2438
    26
+#define	SLIST_FOREACH_SAFE(var, head, field, tvar)			\
yann@2438
    27
+	for ((var) = SLIST_FIRST((head));				\
yann@2438
    28
+	    (var) && ((tvar) = SLIST_NEXT((var), field), 1);		\
yann@2438
    29
+	    (var) = (tvar))
yann@2438
    30
+
yann@2438
    31
+#define	SLIST_FOREACH_PREVPTR(var, varp, head, field)			\
yann@2438
    32
+	for ((varp) = &SLIST_FIRST((head));				\
yann@2438
    33
+	    ((var) = *(varp)) != NULL;					\
yann@2438
    34
+	    (varp) = &SLIST_NEXT((var), field))
yann@2438
    35
+
yann@2438
    36
 /*
yann@2438
    37
  * Singly-linked List access methods.
yann@2438
    38
  */
yann@2438
    39
@@ -242,6 +257,12 @@
yann@2438
    40
 	(head)->stqh_last = &(elm)->field.stqe_next;			\
yann@2438
    41
 } while (/*CONSTCOND*/0)
yann@2438
    42
 
yann@2438
    43
+#define	STAILQ_LAST(head, type, field)					\
yann@2438
    44
+	(STAILQ_EMPTY((head)) ?						\
yann@2438
    45
+		NULL :							\
yann@2438
    46
+	        ((struct type *)(void *)				\
yann@2438
    47
+		((char *)((head)->stqh_last) - __offsetof(struct type, field))))
yann@2438
    48
+
yann@2438
    49
 #define	STAILQ_INSERT_AFTER(head, listelm, elm, field) do {		\
yann@2438
    50
 	if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\
yann@2438
    51
 		(head)->stqh_last = &(elm)->field.stqe_next;		\
yann@2438
    52
@@ -271,6 +292,11 @@
yann@2438
    53
 		(var);							\
yann@2438
    54
 		(var) = ((var)->field.stqe_next))
yann@2438
    55
 
yann@2438
    56
+#define STAILQ_FOREACH_SAFE(var, head, field, tvar)			\
yann@2438
    57
+	for ((var) = STAILQ_FIRST((head));				\
yann@2438
    58
+		(var) && ((tvar) = STAILQ_NEXT((var), field), 1);	\
yann@2438
    59
+		(var) = (tvar))
yann@2438
    60
+
yann@2438
    61
 #define	STAILQ_CONCAT(head1, head2) do {				\
yann@2438
    62
 	if (!STAILQ_EMPTY((head2))) {					\
yann@2438
    63
 		*(head1)->stqh_last = (head2)->stqh_first;		\
yann@2438
    64
@@ -437,11 +463,21 @@
yann@2438
    65
 		(var);							\
yann@2438
    66
 		(var) = ((var)->field.tqe_next))
yann@2438
    67
 
yann@2438
    68
+#define TAILQ_FOREACH_SAFE(var, head, field, tvar)			\
yann@2438
    69
+	for ((var) = TAILQ_FIRST((head));				\
yann@2438
    70
+		(var) && ((tvar) = TAILQ_NEXT((var), field), 1);	\
yann@2438
    71
+		(var) = (tvar))
yann@2438
    72
+
yann@2438
    73
 #define	TAILQ_FOREACH_REVERSE(var, head, headname, field)		\
yann@2438
    74
 	for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last));	\
yann@2438
    75
 		(var);							\
yann@2438
    76
 		(var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last)))
yann@2438
    77
 
yann@2438
    78
+#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar)	\
yann@2438
    79
+	for ((var) = TAILQ_LAST((head), headname);			\
yann@2438
    80
+		(var) && ((tvar) = TAILQ_PREV((var), headname, field), 1);	\
yann@2438
    81
+		(var) = (tvar))
yann@2438
    82
+
yann@2438
    83
 #define	TAILQ_CONCAT(head1, head2, field) do {				\
yann@2438
    84
 	if (!TAILQ_EMPTY(head2)) {					\
yann@2438
    85
 		*(head1)->tqh_last = (head2)->tqh_first;		\