Fix broken _swap
This commit is contained in:
1 parent
fe38244d7c
commit
34dc8b32cb
1 file changed
+12
-4
+12
-4
@@ -498,10 +498,18 @@ typedef struct ilist_head_s {
|
|||||||
{ \
|
{ \
|
||||||
ILISTI_CONTRACT(name, d); \
|
ILISTI_CONTRACT(name, d); \
|
||||||
ILISTI_CONTRACT(name, e); \
|
ILISTI_CONTRACT(name, e); \
|
||||||
M_SWAP(struct ilist_head_s *, d->name.next, e->name.next); \
|
struct ilist_head_s *d_item = d->name.next; \
|
||||||
M_SWAP(struct ilist_head_s *, d->name.prev, e->name.prev); \
|
struct ilist_head_s *e_item = e->name.next; \
|
||||||
M_SWAP(struct ilist_head_s *, d->name.next->prev, e->name.next->prev); \
|
d->name.next = e_item == &e->name ? &d->name : e_item; \
|
||||||
M_SWAP(struct ilist_head_s *, d->name.prev->next, e->name.prev->next); \
|
e->name.next = d_item == &d->name ? &e->name : d_item; \
|
||||||
|
d_item = d->name.prev; \
|
||||||
|
e_item = e->name.prev; \
|
||||||
|
d->name.prev = e_item == &e->name ? &d->name : e_item; \
|
||||||
|
e->name.prev = d_item == &d->name ? &e->name : d_item; \
|
||||||
|
d->name.next->prev = &d->name; \
|
||||||
|
d->name.prev->next = &d->name; \
|
||||||
|
e->name.next->prev = &e->name; \
|
||||||
|
e->name.prev->next = &e->name; \
|
||||||
ILISTI_CONTRACT(name, d); \
|
ILISTI_CONTRACT(name, d); \
|
||||||
ILISTI_CONTRACT(name, e); \
|
ILISTI_CONTRACT(name, e); \
|
||||||
} \
|
} \
|
||||||
|
|||||||
Reference in new issue
Block a user