From: Gustavo Sverzut Barbieri Date: Sat, 17 Dec 2011 00:33:08 +0000 (-0200) Subject: introduce kmod_list_foreach_reverse(). X-Git-Tag: v2~49 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d6b55b7d18f7f70d35b21705d0f45044b98141ab;p=thirdparty%2Fkmod.git introduce kmod_list_foreach_reverse(). walks the list in the reverse order. --- diff --git a/libkmod/libkmod-private.h b/libkmod/libkmod-private.h index 85cfc125..6c8fed23 100644 --- a/libkmod/libkmod-private.h +++ b/libkmod/libkmod-private.h @@ -67,6 +67,13 @@ struct kmod_list *kmod_list_append_list(struct kmod_list *list1, struct kmod_lis list_entry = (list_entry->node.next == &((first_entry)->node)) ? NULL : \ container_of(list_entry->node.next, struct kmod_list, node)) +#undef kmod_list_foreach_reverse +#define kmod_list_foreach_reverse(list_entry, first_entry) \ + for (list_entry = (((first_entry) == NULL) ? NULL : container_of(first_entry->node.prev, struct kmod_list, node)); \ + list_entry != NULL; \ + list_entry = ((list_entry == first_entry) ? NULL : \ + container_of(list_entry->node.prev, struct kmod_list, node))) + /* libkmod.c */ const char *kmod_get_dirname(const struct kmod_ctx *ctx) __attribute__((nonnull(1))); diff --git a/libkmod/libkmod.h b/libkmod/libkmod.h index 37abbcc6..76eaf8ea 100644 --- a/libkmod/libkmod.h +++ b/libkmod/libkmod.h @@ -69,6 +69,11 @@ struct kmod_list *kmod_list_last(const struct kmod_list *first_entry); list_entry != NULL; \ list_entry = kmod_list_next(first_entry, list_entry)) +#define kmod_list_foreach_reverse(list_entry, first_entry) \ + for (list_entry = kmod_list_last(first_entry); \ + list_entry != NULL; \ + list_entry = kmod_list_prev(first_entry, list_entry)) + /* Removal flags, not implemented yet */ enum kmod_remove { KMOD_REMOVE_FORCE = O_TRUNC,