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:
Ondřej Surý 2022-10-18 12:56:42 +00:00
commit bc1acfdccb

View file

@ -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)