Coverage Report

Created: 2025-04-24 06:18

/src/hostap/src/utils/list.h
Line
Count
Source (jump to first uncovered line)
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
13.2k
{
24
13.2k
  list->next = list;
25
13.2k
  list->prev = list;
26
13.2k
}
p2p.c:dl_list_init
Line
Count
Source
23
6.63k
{
24
6.63k
  list->next = list;
25
6.63k
  list->prev = list;
26
6.63k
}
eloop.c:dl_list_init
Line
Count
Source
23
6.63k
{
24
6.63k
  list->next = list;
25
6.63k
  list->prev = list;
26
6.63k
}
Unexecuted instantiation: p2p_dev_disc.c:dl_list_init
Unexecuted instantiation: p2p_go_neg.c:dl_list_init
Unexecuted instantiation: p2p_group.c:dl_list_init
Unexecuted instantiation: p2p_invitation.c:dl_list_init
Unexecuted instantiation: p2p_parse.c:dl_list_init
Unexecuted instantiation: p2p_pd.c:dl_list_init
Unexecuted instantiation: p2p_sd.c:dl_list_init
Unexecuted instantiation: p2p_utils.c:dl_list_init
Unexecuted instantiation: p2p_build.c:dl_list_init
Unexecuted instantiation: wps_registrar.c:dl_list_init
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
8.66k
{
30
8.66k
  item->next = list->next;
31
8.66k
  item->prev = list;
32
8.66k
  list->next->prev = item;
33
8.66k
  list->next = item;
34
8.66k
}
p2p.c:dl_list_add
Line
Count
Source
29
2.03k
{
30
2.03k
  item->next = list->next;
31
2.03k
  item->prev = list;
32
2.03k
  list->next->prev = item;
33
2.03k
  list->next = item;
34
2.03k
}
eloop.c:dl_list_add
Line
Count
Source
29
6.63k
{
30
6.63k
  item->next = list->next;
31
6.63k
  item->prev = list;
32
6.63k
  list->next->prev = item;
33
6.63k
  list->next = item;
34
6.63k
}
Unexecuted instantiation: p2p_dev_disc.c:dl_list_add
Unexecuted instantiation: p2p_go_neg.c:dl_list_add
Unexecuted instantiation: p2p_group.c:dl_list_add
Unexecuted instantiation: p2p_invitation.c:dl_list_add
Unexecuted instantiation: p2p_parse.c:dl_list_add
Unexecuted instantiation: p2p_pd.c:dl_list_add
Unexecuted instantiation: p2p_sd.c:dl_list_add
Unexecuted instantiation: p2p_utils.c:dl_list_add
Unexecuted instantiation: p2p_build.c:dl_list_add
Unexecuted instantiation: wps_registrar.c:dl_list_add
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
6.63k
{
38
6.63k
  dl_list_add(list->prev, item);
39
6.63k
}
Unexecuted instantiation: p2p.c:dl_list_add_tail
eloop.c:dl_list_add_tail
Line
Count
Source
37
6.63k
{
38
6.63k
  dl_list_add(list->prev, item);
39
6.63k
}
Unexecuted instantiation: p2p_dev_disc.c:dl_list_add_tail
Unexecuted instantiation: p2p_go_neg.c:dl_list_add_tail
Unexecuted instantiation: p2p_group.c:dl_list_add_tail
Unexecuted instantiation: p2p_invitation.c:dl_list_add_tail
Unexecuted instantiation: p2p_parse.c:dl_list_add_tail
Unexecuted instantiation: p2p_pd.c:dl_list_add_tail
Unexecuted instantiation: p2p_sd.c:dl_list_add_tail
Unexecuted instantiation: p2p_utils.c:dl_list_add_tail
Unexecuted instantiation: p2p_build.c:dl_list_add_tail
Unexecuted instantiation: wps_registrar.c:dl_list_add_tail
Unexecuted instantiation: ieee802_11_common.c:dl_list_add_tail
40
41
static inline void dl_list_del(struct dl_list *item)
42
8.66k
{
43
8.66k
  item->next->prev = item->prev;
44
8.66k
  item->prev->next = item->next;
45
8.66k
  item->next = NULL;
46
8.66k
  item->prev = NULL;
47
8.66k
}
p2p.c:dl_list_del
Line
Count
Source
42
2.03k
{
43
2.03k
  item->next->prev = item->prev;
44
2.03k
  item->prev->next = item->next;
45
2.03k
  item->next = NULL;
46
2.03k
  item->prev = NULL;
47
2.03k
}
eloop.c:dl_list_del
Line
Count
Source
42
6.63k
{
43
6.63k
  item->next->prev = item->prev;
44
6.63k
  item->prev->next = item->next;
45
6.63k
  item->next = NULL;
46
6.63k
  item->prev = NULL;
47
6.63k
}
Unexecuted instantiation: p2p_dev_disc.c:dl_list_del
Unexecuted instantiation: p2p_go_neg.c:dl_list_del
Unexecuted instantiation: p2p_group.c:dl_list_del
Unexecuted instantiation: p2p_invitation.c:dl_list_del
Unexecuted instantiation: p2p_parse.c:dl_list_del
Unexecuted instantiation: p2p_pd.c:dl_list_del
Unexecuted instantiation: p2p_sd.c:dl_list_del
Unexecuted instantiation: p2p_utils.c:dl_list_del
Unexecuted instantiation: p2p_build.c:dl_list_del
Unexecuted instantiation: wps_registrar.c:dl_list_del
Unexecuted instantiation: ieee802_11_common.c:dl_list_del
48
49
static inline int dl_list_empty(const struct dl_list *list)
50
19.8k
{
51
19.8k
  return list->next == list;
52
19.8k
}
Unexecuted instantiation: p2p.c:dl_list_empty
eloop.c:dl_list_empty
Line
Count
Source
50
19.8k
{
51
19.8k
  return list->next == list;
52
19.8k
}
Unexecuted instantiation: p2p_dev_disc.c:dl_list_empty
Unexecuted instantiation: p2p_go_neg.c:dl_list_empty
Unexecuted instantiation: p2p_group.c:dl_list_empty
Unexecuted instantiation: p2p_invitation.c:dl_list_empty
Unexecuted instantiation: p2p_parse.c:dl_list_empty
Unexecuted instantiation: p2p_pd.c:dl_list_empty
Unexecuted instantiation: p2p_sd.c:dl_list_empty
Unexecuted instantiation: p2p_utils.c:dl_list_empty
Unexecuted instantiation: p2p_build.c:dl_list_empty
Unexecuted instantiation: wps_registrar.c:dl_list_empty
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: p2p.c:dl_list_len
Unexecuted instantiation: eloop.c:dl_list_len
Unexecuted instantiation: p2p_dev_disc.c:dl_list_len
Unexecuted instantiation: p2p_go_neg.c:dl_list_len
Unexecuted instantiation: p2p_group.c:dl_list_len
Unexecuted instantiation: p2p_invitation.c:dl_list_len
Unexecuted instantiation: p2p_parse.c:dl_list_len
Unexecuted instantiation: p2p_pd.c:dl_list_len
Unexecuted instantiation: p2p_sd.c:dl_list_len
Unexecuted instantiation: p2p_utils.c:dl_list_len
Unexecuted instantiation: p2p_build.c:dl_list_len
Unexecuted instantiation: wps_registrar.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
158k
  ((type *) ((char *) item - offsetof(type, member)))
69
70
#define dl_list_first(list, type, member) \
71
13.2k
  (dl_list_empty((list)) ? NULL : \
72
13.2k
   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
21.3k
  for (item = dl_list_entry((list)->next, type, member); \
80
23.7k
       &item->member != (list); \
81
20.7k
       item = dl_list_entry(item->member.next, type, member))
82
83
#define dl_list_for_each_safe(item, n, list, type, member) \
84
59.6k
  for (item = dl_list_entry((list)->next, type, member), \
85
59.6k
         n = dl_list_entry(item->member.next, type, member); \
86
61.7k
       &item->member != (list); \
87
59.6k
       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 */