X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fldap_queue.h;fp=include%2Fldap_queue.h;h=8e13582ed122dce4fffb90a081375a17d7c000c2;hb=451a9623f3108f397a58105041c6cd3bbf555b51;hp=1b711b10cbc888d9eefdaa5ed71940062db9c75a;hpb=48ec8223dad4b97c5bb3360b9bd8fa0ee7f16f9d;p=openldap diff --git a/include/ldap_queue.h b/include/ldap_queue.h index 1b711b10cb..8e13582ed1 100644 --- a/include/ldap_queue.h +++ b/include/ldap_queue.h @@ -384,26 +384,20 @@ struct { \ #define LDAP_TAILQ_FOREACH(var, head, field) \ for (var = LDAP_TAILQ_FIRST(head); var; var = LDAP_TAILQ_NEXT(var, field)) -#define LDAP_TAILQ_FOREACH_REVERSE(var, head, type, field) \ - for ((var) = LDAP_TAILQ_LAST((head), type, field); \ +#define LDAP_TAILQ_FOREACH_REVERSE(var, head, headname, field) \ + for ((var) = LDAP_TAILQ_LAST((head), headname); \ (var); \ - (var) = LDAP_TAILQ_PREV((var), head, type, field)) + (var) = LDAP_TAILQ_PREV((var), headname, field)) #define LDAP_TAILQ_FIRST(head) ((head)->tqh_first) -#define LDAP_TAILQ_LAST(head, type, field) \ - (LDAP_TAILQ_EMPTY(head) ? \ - NULL : \ - ((struct type *) \ - ((char *)((head)->tqh_last) - offsetof(struct type, field)))) +#define LDAP_TAILQ_LAST(head, headname) \ + (*(((struct headname *)((head)->tqh_last))->tqh_last)) #define LDAP_TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) -#define LDAP_TAILQ_PREV(elm, head, type, field) \ - ((struct type *)((elm)->field.tqe_prev) == LDAP_TAILQ_FIRST(head) ? \ - NULL : \ - ((struct type *) \ - ((char *)((elm)->field.tqe_prev) - offsetof(struct type, field)))) +#define LDAP_TAILQ_PREV(elm, headname, field) \ + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) #define LDAP_TAILQ_INIT(head) do { \ (head)->tqh_first = NULL; \