mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-27 12:13:20 -04:00
Merge branch 'ondrej-add-ISC_LIST,LINK_INITIALIZER-v9_18' into 'v9_18'
Add ISC_{LIST,LINK}_INITIALIZER for designated initializers [v9.18]
See merge request isc-projects/bind9!6934
This commit is contained in:
commit
bc1acfdccb
1 changed files with 23 additions and 8 deletions
|
|
@ -15,6 +15,19 @@
|
|||
|
||||
#include <isc/assertions.h>
|
||||
|
||||
#define ISC_LINK_TOMBSTONE(type) ((type *)-1)
|
||||
|
||||
#define ISC_LIST_INITIALIZER \
|
||||
{ \
|
||||
.head = NULL, .tail = NULL, \
|
||||
}
|
||||
#define ISC_LINK_INITIALIZER_TYPE(type) \
|
||||
{ \
|
||||
.prev = ISC_LINK_TOMBSTONE(type), \
|
||||
.next = ISC_LINK_TOMBSTONE(type), \
|
||||
}
|
||||
#define ISC_LINK_INITIALIZER ISC_LINK_INITIALIZER_TYPE(void)
|
||||
|
||||
#ifdef ISC_LIST_CHECKINIT
|
||||
#define ISC_LINK_INSIST(x) ISC_INSIST(x)
|
||||
#else /* ifdef ISC_LIST_CHECKINIT */
|
||||
|
|
@ -35,13 +48,15 @@
|
|||
struct { \
|
||||
type *prev, *next; \
|
||||
}
|
||||
#define ISC_LINK_INIT_TYPE(elt, link, type) \
|
||||
do { \
|
||||
(elt)->link.prev = (type *)(-1); \
|
||||
(elt)->link.next = (type *)(-1); \
|
||||
#define ISC_LINK_INIT_TYPE(elt, link, type) \
|
||||
do { \
|
||||
(elt)->link.prev = ISC_LINK_TOMBSTONE(type); \
|
||||
(elt)->link.next = ISC_LINK_TOMBSTONE(type); \
|
||||
} while (0)
|
||||
#define ISC_LINK_INIT(elt, link) ISC_LINK_INIT_TYPE(elt, link, void)
|
||||
#define ISC_LINK_LINKED(elt, link) ((void *)((elt)->link.prev) != (void *)(-1))
|
||||
#define ISC_LINK_INIT(elt, link) ISC_LINK_INIT_TYPE(elt, link, void)
|
||||
#define ISC_LINK_LINKED_TYPE(elt, link, type) \
|
||||
((type *)((elt)->link.prev) != ISC_LINK_TOMBSTONE(type))
|
||||
#define ISC_LINK_LINKED(elt, link) ISC_LINK_LINKED_TYPE(elt, link, void)
|
||||
|
||||
#define ISC_LIST_HEAD(list) ((list).head)
|
||||
#define ISC_LIST_TAIL(list) ((list).tail)
|
||||
|
|
@ -103,8 +118,8 @@
|
|||
ISC_INSIST((list).head == (elt)); \
|
||||
(list).head = (elt)->link.next; \
|
||||
} \
|
||||
(elt)->link.prev = (type *)(-1); \
|
||||
(elt)->link.next = (type *)(-1); \
|
||||
(elt)->link.prev = ISC_LINK_TOMBSTONE(type); \
|
||||
(elt)->link.next = ISC_LINK_TOMBSTONE(type); \
|
||||
ISC_INSIST((list).head != (elt)); \
|
||||
ISC_INSIST((list).tail != (elt)); \
|
||||
} while (0)
|
||||
|
|
|
|||
Loading…
Reference in a new issue