Coverage Report

Created: 2025-10-10 06:58

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gpac/src/quickjs/list.h
Line
Count
Source
1
/*
2
 * Linux klist like system
3
 * 
4
 * Copyright (c) 2016-2017 Fabrice Bellard
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a copy
7
 * of this software and associated documentation files (the "Software"), to deal
8
 * in the Software without restriction, including without limitation the rights
9
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
 * copies of the Software, and to permit persons to whom the Software is
11
 * furnished to do so, subject to the following conditions:
12
 *
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
 * THE SOFTWARE.
23
 */
24
#ifndef LIST_H
25
#define LIST_H
26
27
#ifndef NULL
28
#include <stddef.h>
29
#endif
30
31
struct list_head {
32
    struct list_head *prev;
33
    struct list_head *next;
34
};
35
36
#define LIST_HEAD_INIT(el) { &(el), &(el) }
37
38
/* return the pointer of type 'type *' containing 'el' as field 'member' */
39
#define list_entry(el, type, member) \
40
0
    ((type *)((uint8_t *)(el) - offsetof(type, member)))
41
42
static inline void init_list_head(struct list_head *head)
43
0
{
44
0
    head->prev = head;
45
0
    head->next = head;
46
0
}
Unexecuted instantiation: quickjs.c:init_list_head
Unexecuted instantiation: quickjs-libc.c:init_list_head
47
48
/* insert 'el' between 'prev' and 'next' */
49
static inline void __list_add(struct list_head *el, 
50
                              struct list_head *prev, struct list_head *next)
51
0
{
52
0
    prev->next = el;
53
0
    el->prev = prev;
54
0
    el->next = next;
55
0
    next->prev = el;
56
0
}
Unexecuted instantiation: quickjs.c:__list_add
Unexecuted instantiation: quickjs-libc.c:__list_add
57
58
/* add 'el' at the head of the list 'head' (= after element head) */
59
static inline void list_add(struct list_head *el, struct list_head *head)
60
0
{
61
0
    __list_add(el, head, head->next);
62
0
}
Unexecuted instantiation: quickjs.c:list_add
Unexecuted instantiation: quickjs-libc.c:list_add
63
64
/* add 'el' at the end of the list 'head' (= before element head) */
65
static inline void list_add_tail(struct list_head *el, struct list_head *head)
66
0
{
67
0
    __list_add(el, head->prev, head);
68
0
}
Unexecuted instantiation: quickjs.c:list_add_tail
Unexecuted instantiation: quickjs-libc.c:list_add_tail
69
70
static inline void list_del(struct list_head *el)
71
0
{
72
0
    struct list_head *prev, *next;
73
0
    prev = el->prev;
74
0
    next = el->next;
75
0
    prev->next = next;
76
0
    next->prev = prev;
77
0
    el->prev = NULL; /* fail safe */
78
0
    el->next = NULL; /* fail safe */
79
0
}
Unexecuted instantiation: quickjs.c:list_del
Unexecuted instantiation: quickjs-libc.c:list_del
80
81
static inline int list_empty(struct list_head *el)
82
0
{
83
0
    return el->next == el;
84
0
}
Unexecuted instantiation: quickjs.c:list_empty
Unexecuted instantiation: quickjs-libc.c:list_empty
85
86
#define list_for_each(el, head) \
87
0
  for(el = (head)->next; el != (head); el = el->next)
88
89
#define list_for_each_safe(el, el1, head)                \
90
0
    for(el = (head)->next, el1 = el->next; el != (head); \
91
0
        el = el1, el1 = el->next)
92
93
#define list_for_each_prev(el, head) \
94
  for(el = (head)->prev; el != (head); el = el->prev)
95
96
#define list_for_each_prev_safe(el, el1, head)           \
97
    for(el = (head)->prev, el1 = el->prev; el != (head); \
98
        el = el1, el1 = el->prev)
99
100
#endif /* LIST_H */