/src/hostap/src/utils/list.h
Line | Count | Source |
1 | | /* |
2 | | * Doubly-linked list |
3 | | * Copyright (c) 2009-2019, Jouni Malinen <j@w1.fi> |
4 | | * |
5 | | * This software may be distributed under the terms of the BSD license. |
6 | | * See README for more details. |
7 | | */ |
8 | | |
9 | | #ifndef LIST_H |
10 | | #define LIST_H |
11 | | |
12 | | /** |
13 | | * struct dl_list - Doubly-linked list |
14 | | */ |
15 | | struct dl_list { |
16 | | struct dl_list *next; |
17 | | struct dl_list *prev; |
18 | | }; |
19 | | |
20 | | #define DL_LIST_HEAD_INIT(l) { &(l), &(l) } |
21 | | |
22 | | static inline void dl_list_init(struct dl_list *list) |
23 | 5.51k | { |
24 | 5.51k | list->next = list; |
25 | 5.51k | list->prev = list; |
26 | 5.51k | } Unexecuted instantiation: eapol-supp.c:dl_list_init Line | Count | Source | 23 | 1.83k | { | 24 | 1.83k | list->next = list; | 25 | 1.83k | list->prev = list; | 26 | 1.83k | } |
Unexecuted instantiation: wpa_ie.c:dl_list_init Unexecuted instantiation: pmksa_cache.c:dl_list_init Unexecuted instantiation: wpa_ft.c:dl_list_init Unexecuted instantiation: tdls.c:dl_list_init Unexecuted instantiation: preauth.c:dl_list_init Line | Count | Source | 23 | 1.83k | { | 24 | 1.83k | list->next = list; | 25 | 1.83k | list->prev = list; | 26 | 1.83k | } |
Unexecuted instantiation: eap_methods.c:dl_list_init Line | Count | Source | 23 | 1.83k | { | 24 | 1.83k | list->next = list; | 25 | 1.83k | list->prev = list; | 26 | 1.83k | } |
Unexecuted instantiation: ieee802_11_common.c:dl_list_init |
27 | | |
28 | | static inline void dl_list_add(struct dl_list *list, struct dl_list *item) |
29 | 3.67k | { |
30 | 3.67k | item->next = list->next; |
31 | 3.67k | item->prev = list; |
32 | 3.67k | list->next->prev = item; |
33 | 3.67k | list->next = item; |
34 | 3.67k | } Unexecuted instantiation: eapol-supp.c:dl_list_add Unexecuted instantiation: wpa.c:dl_list_add Unexecuted instantiation: wpa_ie.c:dl_list_add Unexecuted instantiation: pmksa_cache.c:dl_list_add Unexecuted instantiation: wpa_ft.c:dl_list_add Unexecuted instantiation: tdls.c:dl_list_add Unexecuted instantiation: preauth.c:dl_list_add Unexecuted instantiation: eap.c:dl_list_add Unexecuted instantiation: eap_methods.c:dl_list_add Line | Count | Source | 29 | 3.67k | { | 30 | 3.67k | item->next = list->next; | 31 | 3.67k | item->prev = list; | 32 | 3.67k | list->next->prev = item; | 33 | 3.67k | list->next = item; | 34 | 3.67k | } |
Unexecuted instantiation: ieee802_11_common.c:dl_list_add |
35 | | |
36 | | static inline void dl_list_add_tail(struct dl_list *list, struct dl_list *item) |
37 | 1.83k | { |
38 | 1.83k | dl_list_add(list->prev, item); |
39 | 1.83k | } Unexecuted instantiation: eapol-supp.c:dl_list_add_tail Unexecuted instantiation: wpa.c:dl_list_add_tail Unexecuted instantiation: wpa_ie.c:dl_list_add_tail Unexecuted instantiation: pmksa_cache.c:dl_list_add_tail Unexecuted instantiation: wpa_ft.c:dl_list_add_tail Unexecuted instantiation: tdls.c:dl_list_add_tail Unexecuted instantiation: preauth.c:dl_list_add_tail Unexecuted instantiation: eap.c:dl_list_add_tail Unexecuted instantiation: eap_methods.c:dl_list_add_tail Line | Count | Source | 37 | 1.83k | { | 38 | 1.83k | dl_list_add(list->prev, item); | 39 | 1.83k | } |
Unexecuted instantiation: ieee802_11_common.c:dl_list_add_tail |
40 | | |
41 | | static inline void dl_list_del(struct dl_list *item) |
42 | 3.67k | { |
43 | 3.67k | item->next->prev = item->prev; |
44 | 3.67k | item->prev->next = item->next; |
45 | 3.67k | item->next = NULL; |
46 | 3.67k | item->prev = NULL; |
47 | 3.67k | } Unexecuted instantiation: eapol-supp.c:dl_list_del Unexecuted instantiation: wpa.c:dl_list_del Unexecuted instantiation: wpa_ie.c:dl_list_del Unexecuted instantiation: pmksa_cache.c:dl_list_del Unexecuted instantiation: wpa_ft.c:dl_list_del Unexecuted instantiation: tdls.c:dl_list_del Unexecuted instantiation: preauth.c:dl_list_del Unexecuted instantiation: eap.c:dl_list_del Unexecuted instantiation: eap_methods.c:dl_list_del Line | Count | Source | 42 | 3.67k | { | 43 | 3.67k | item->next->prev = item->prev; | 44 | 3.67k | item->prev->next = item->next; | 45 | 3.67k | item->next = NULL; | 46 | | item->prev = NULL; | 47 | 3.67k | } |
Unexecuted instantiation: ieee802_11_common.c:dl_list_del |
48 | | |
49 | | static inline int dl_list_empty(const struct dl_list *list) |
50 | 5.51k | { |
51 | 5.51k | return list->next == list; |
52 | 5.51k | } Unexecuted instantiation: eapol-supp.c:dl_list_empty Unexecuted instantiation: wpa.c:dl_list_empty Unexecuted instantiation: wpa_ie.c:dl_list_empty Unexecuted instantiation: pmksa_cache.c:dl_list_empty Unexecuted instantiation: wpa_ft.c:dl_list_empty Unexecuted instantiation: tdls.c:dl_list_empty Unexecuted instantiation: preauth.c:dl_list_empty Unexecuted instantiation: eap.c:dl_list_empty Unexecuted instantiation: eap_methods.c:dl_list_empty Line | Count | Source | 50 | 5.51k | { | 51 | 5.51k | return list->next == list; | 52 | 5.51k | } |
Unexecuted instantiation: ieee802_11_common.c:dl_list_empty |
53 | | |
54 | | static inline unsigned int dl_list_len(const struct dl_list *list) |
55 | 0 | { |
56 | 0 | struct dl_list *item; |
57 | 0 | int count = 0; |
58 | 0 | for (item = list->next; item != list; item = item->next) |
59 | 0 | count++; |
60 | 0 | return count; |
61 | 0 | } Unexecuted instantiation: eapol-supp.c:dl_list_len Unexecuted instantiation: wpa.c:dl_list_len Unexecuted instantiation: wpa_ie.c:dl_list_len Unexecuted instantiation: pmksa_cache.c:dl_list_len Unexecuted instantiation: wpa_ft.c:dl_list_len Unexecuted instantiation: tdls.c:dl_list_len Unexecuted instantiation: preauth.c:dl_list_len Unexecuted instantiation: eap.c:dl_list_len Unexecuted instantiation: eap_methods.c:dl_list_len Unexecuted instantiation: eloop.c:dl_list_len Unexecuted instantiation: ieee802_11_common.c:dl_list_len |
62 | | |
63 | | #ifndef offsetof |
64 | | #define offsetof(type, member) ((long) &((type *) 0)->member) |
65 | | #endif |
66 | | |
67 | | #define dl_list_entry(item, type, member) \ |
68 | 44.1k | ((type *) ((char *) item - offsetof(type, member))) |
69 | | |
70 | | #define dl_list_first(list, type, member) \ |
71 | 3.67k | (dl_list_empty((list)) ? NULL : \ |
72 | 3.67k | dl_list_entry((list)->next, type, member)) |
73 | | |
74 | | #define dl_list_last(list, type, member) \ |
75 | | (dl_list_empty((list)) ? NULL : \ |
76 | | dl_list_entry((list)->prev, type, member)) |
77 | | |
78 | | #define dl_list_for_each(item, list, type, member) \ |
79 | 3.67k | for (item = dl_list_entry((list)->next, type, member); \ |
80 | 3.67k | &item->member != (list); \ |
81 | 3.67k | item = dl_list_entry(item->member.next, type, member)) |
82 | | |
83 | | #define dl_list_for_each_safe(item, n, list, type, member) \ |
84 | 12.8k | for (item = dl_list_entry((list)->next, type, member), \ |
85 | 12.8k | n = dl_list_entry(item->member.next, type, member); \ |
86 | 23.9k | &item->member != (list); \ |
87 | 12.8k | item = n, n = dl_list_entry(n->member.next, type, member)) |
88 | | |
89 | | #define dl_list_for_each_reverse(item, list, type, member) \ |
90 | | for (item = dl_list_entry((list)->prev, type, member); \ |
91 | | &item->member != (list); \ |
92 | | item = dl_list_entry(item->member.prev, type, member)) |
93 | | |
94 | | #define DEFINE_DL_LIST(name) \ |
95 | | struct dl_list name = { &(name), &(name) } |
96 | | |
97 | | #endif /* LIST_H */ |