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