Skip to content

Linked list

struct list_head {
struct list_head *next;
};

struct list_head referenced types:

void INIT_LIST_HEAD(struct list_head *list);

INIT_LIST_HEAD referenced types:

void __list_add(struct list_head *new, struct list_head *prev, struct list_head *next);

__list_add referenced types:

void list_add(struct list_head *new, struct list_head *head);

list_add referenced types:

void list_add_tail(struct list_head *new, struct list_head *head);

list_add_tail referenced types:

void __list_del(struct list_head *prev, struct list_head *next);

__list_del referenced types:

void list_del(struct list_head *entry);

list_del referenced types:

void list_del_init(struct list_head *entry);

list_del_init referenced types:

int list_empty(struct list_head *head);

list_empty referenced types:

struct list_head list_pop_front(struct list_head *head);

list_pop_front referenced types:

struct list_head list_pop_front_init(struct list_head *head);

list_pop_front_init referenced types:

void __list_splice(struct list_head *list, struct list_head *prev, struct list_head *next);

__list_splice referenced types:

void list_splice_init(struct list_head *src, struct list_head *dst);

list_splice_init referenced types:

void list_splice_tail_init(struct list_head *list, struct list_head *head);

list_splice_tail_init referenced types:

#define LIST_HEAD_INIT(name) {&(name), &(name)}
#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)
#define list_entry(ptr, type, member) \ ((type *) ((char *) (ptr) - (offsetof(type, member))))
#define list_for_each(pos, head) \ for (pos = (head)->next; pos != (head); pos = pos->next)
#define list_for_each_safe(pos, n, head) \ for (pos = (head)->next, n = pos->next; pos != (head); \ pos = n, n = pos->next)
#define list_for_each_entry(pos, head, member) \ for (pos = list_entry((head)->next, typeof(*pos), member); \ &pos->member != (head); \ pos = list_entry(pos->member.next, typeof(*pos), member))
#define list_first_entry(ptr, type, member) \ list_entry((ptr)->next, type, member)
#define list_for_each_entry_safe(pos, n, head, member) \ for (pos = list_entry((head)->next, typeof(*pos), member), \ n = list_entry(pos->member.next, typeof(*pos), member); \ &pos->member != (head); \ pos = n, n = list_entry(n->member.next, typeof(*n), member))
#define list_for_each_entry_safe_continue(pos, n, head, member) \ for (pos = list_entry(pos->member.next, typeof(*pos), member), \ n = list_entry(pos->member.next, typeof(*pos), member); \ &pos->member != (head); \ pos = n, n = list_entry(n->member.next, typeof(*n), member))
#define SLIST_HEAD(name, type) \ struct name { \ struct type *slh_first; \ }
#define SLIST_EMPTY(head) ((head)->slh_first == NULL)
#define SLIST_HEAD_INIT(head) {.slh_first = NULL}
#define SLIST_INIT(head) \ do { \ (head)->slh_first = NULL; \ } while (0)
#define SLIST_ENTRY(type) \ struct { \ struct type *sle_next; \ }
#define SLIST_FIRST(head) ((head)->slh_first)
#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
#define SLIST_INSERT_HEAD(head, elm, field) \ do { \ (elm)->field.sle_next = (head)->slh_first; \ (head)->slh_first = (elm); \ } while (0)
#define SLIST_REMOVE_HEAD(head, field) \ do { \ (head)->slh_first = (head)->slh_first->field.sle_next; \ } while (0)
#define SLIST_FOREACH(var, head, field) \ for ((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)