X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flist.h;h=602c549bb7ab29c7797ffc19a5fb42a8f1c19ddd;hb=b67da66b07a77d9bd67926f83c5ae7aa57f1dba9;hp=03f4b48c0bd525f0d7a7e3a4858b484f48e955e5;hpb=3f0201adb5da48e98039e4a7552284b77004784a;p=sliver-openvswitch.git diff --git a/include/list.h b/include/list.h index 03f4b48c0..602c549bb 100644 --- a/include/list.h +++ b/include/list.h @@ -70,18 +70,18 @@ struct list *list_back(struct list *); size_t list_size(const struct list *); bool list_is_empty(const struct list *); -#define LIST_ELEM__(ELEM, STRUCT, MEMBER, LIST) \ - (ELEM != LIST ? CONTAINER_OF(ELEM, STRUCT, MEMBER) : NULL) #define LIST_FOR_EACH(ITER, STRUCT, MEMBER, LIST) \ - for (ITER = LIST_ELEM__((LIST)->next, STRUCT, MEMBER, LIST); \ - ITER != NULL; \ - ITER = LIST_ELEM__((ITER)->MEMBER.next, STRUCT, MEMBER, LIST)) + for (ITER = CONTAINER_OF((LIST)->next, STRUCT, MEMBER); \ + &(ITER)->MEMBER != (LIST); \ + ITER = CONTAINER_OF((ITER)->MEMBER.next, STRUCT, MEMBER)) +#define LIST_FOR_EACH_REVERSE(ITER, STRUCT, MEMBER, LIST) \ + for (ITER = CONTAINER_OF((LIST)->prev, STRUCT, MEMBER); \ + &(ITER)->MEMBER != (LIST); \ + ITER = CONTAINER_OF((ITER)->MEMBER.prev, STRUCT, MEMBER)) #define LIST_FOR_EACH_SAFE(ITER, NEXT, STRUCT, MEMBER, LIST) \ - for (ITER = LIST_ELEM__((LIST)->next, STRUCT, MEMBER, LIST); \ - (ITER != NULL \ - ? (NEXT = LIST_ELEM__((ITER)->MEMBER.next, \ - STRUCT, MEMBER, LIST), 1) \ - : 0); \ + for (ITER = CONTAINER_OF((LIST)->next, STRUCT, MEMBER); \ + (NEXT = CONTAINER_OF((ITER)->MEMBER.next, STRUCT, MEMBER), \ + &(ITER)->MEMBER != (LIST)); \ ITER = NEXT) #endif /* list.h */