Line | Count | Source |
1 | | /* |
2 | | * Copyright (C) 2002 Free Software Foundation, Inc. |
3 | | * (originally part of the GNU C Library and Userspace RCU) |
4 | | * Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. |
5 | | * |
6 | | * Copyright (C) 2009 Pierre-Marc Fournier |
7 | | * Conversion to RCU list. |
8 | | * Copyright (C) 2010 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> |
9 | | * |
10 | | * This library is free software; you can redistribute it and/or |
11 | | * modify it under the terms of the GNU Lesser General Public |
12 | | * License as published by the Free Software Foundation; either |
13 | | * version 2.1 of the License, or (at your option) any later version. |
14 | | * |
15 | | * This library is distributed in the hope that it will be useful, |
16 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
18 | | * Lesser General Public License for more details. |
19 | | * |
20 | | * You should have received a copy of the GNU Lesser General Public |
21 | | * License along with this library; if not, see |
22 | | * <https://www.gnu.org/licenses/>. |
23 | | */ |
24 | | |
25 | | #ifndef LIST_H |
26 | | #define LIST_H 1 |
27 | | |
28 | | /* |
29 | | * The definitions of this file are adopted from those which can be |
30 | | * found in the Linux kernel headers to enable people familiar with the |
31 | | * latter find their way in these sources as well. |
32 | | */ |
33 | | |
34 | | /* Basic type for the double-link list. */ |
35 | | struct list_head { |
36 | | struct list_head *next, *prev; |
37 | | }; |
38 | | |
39 | | /* avoid conflicts with BSD-only sys/queue.h */ |
40 | | #undef LIST_HEAD |
41 | | /* Define a variable with the head and tail of the list. */ |
42 | | #define LIST_HEAD(name) \ |
43 | 0 | struct list_head name = { &(name), &(name) } |
44 | | |
45 | | /* Initialize a new list head. */ |
46 | | #define INIT_LIST_HEAD(ptr) \ |
47 | 0 | (ptr)->next = (ptr)->prev = (ptr) |
48 | | |
49 | | #define LIST_HEAD_INIT(name) { \ |
50 | | .next = &(name), \ |
51 | | .prev = &(name), \ |
52 | | } |
53 | | |
54 | | /* Add new element at the head of the list. */ |
55 | | static inline void list_add(struct list_head *newp, struct list_head *head) |
56 | 0 | { |
57 | 0 | head->next->prev = newp; |
58 | 0 | newp->next = head->next; |
59 | 0 | newp->prev = head; |
60 | 0 | head->next = newp; |
61 | 0 | } Unexecuted instantiation: run-command.c:list_add Unexecuted instantiation: config.c:list_add Unexecuted instantiation: lockfile.c:list_add Unexecuted instantiation: object-file.c:list_add Unexecuted instantiation: object-name.c:list_add Unexecuted instantiation: odb.c:list_add Unexecuted instantiation: streaming.c:list_add Unexecuted instantiation: pack-write.c:list_add Unexecuted instantiation: packfile.c:list_add Unexecuted instantiation: path.c:list_add Unexecuted instantiation: pretty.c:list_add Unexecuted instantiation: promisor-remote.c:list_add Unexecuted instantiation: read-cache.c:list_add Unexecuted instantiation: refs.c:list_add Unexecuted instantiation: files-backend.c:list_add Unexecuted instantiation: packed-backend.c:list_add Unexecuted instantiation: system.c:list_add Unexecuted instantiation: repo-settings.c:list_add Unexecuted instantiation: repository.c:list_add Unexecuted instantiation: revision.c:list_add Unexecuted instantiation: setup.c:list_add Unexecuted instantiation: shallow.c:list_add Unexecuted instantiation: tag.c:list_add Unexecuted instantiation: tempfile.c:list_add Unexecuted instantiation: trailer.c:list_add Unexecuted instantiation: wt-status.c:list_add Unexecuted instantiation: bundle.c:list_add Unexecuted instantiation: cache-tree.c:list_add Unexecuted instantiation: chdir-notify.c:list_add Unexecuted instantiation: commit-graph.c:list_add Unexecuted instantiation: commit.c:list_add Unexecuted instantiation: connected.c:list_add Unexecuted instantiation: diff.c:list_add Unexecuted instantiation: fetch-pack.c:list_add Unexecuted instantiation: fsck.c:list_add Unexecuted instantiation: gpg-interface.c:list_add Unexecuted instantiation: list-objects.c:list_add Unexecuted instantiation: loose.c:list_add Unexecuted instantiation: midx.c:list_add Unexecuted instantiation: pack-check.c:list_add Unexecuted instantiation: pack-revindex.c:list_add Unexecuted instantiation: range-diff.c:list_add Unexecuted instantiation: send-pack.c:list_add Unexecuted instantiation: sequencer.c:list_add Unexecuted instantiation: transport-helper.c:list_add Unexecuted instantiation: apply.c:list_add Unexecuted instantiation: merge-ort-wrappers.c:list_add Unexecuted instantiation: merge.c:list_add Unexecuted instantiation: rerere.c:list_add Unexecuted instantiation: reset.c:list_add |
62 | | |
63 | | /* Add new element at the tail of the list. */ |
64 | | static inline void list_add_tail(struct list_head *newp, struct list_head *head) |
65 | 0 | { |
66 | 0 | head->prev->next = newp; |
67 | 0 | newp->next = head; |
68 | 0 | newp->prev = head->prev; |
69 | 0 | head->prev = newp; |
70 | 0 | } Unexecuted instantiation: run-command.c:list_add_tail Unexecuted instantiation: config.c:list_add_tail Unexecuted instantiation: lockfile.c:list_add_tail Unexecuted instantiation: object-file.c:list_add_tail Unexecuted instantiation: object-name.c:list_add_tail Unexecuted instantiation: odb.c:list_add_tail Unexecuted instantiation: streaming.c:list_add_tail Unexecuted instantiation: pack-write.c:list_add_tail Unexecuted instantiation: packfile.c:list_add_tail Unexecuted instantiation: path.c:list_add_tail Unexecuted instantiation: pretty.c:list_add_tail Unexecuted instantiation: promisor-remote.c:list_add_tail Unexecuted instantiation: read-cache.c:list_add_tail Unexecuted instantiation: refs.c:list_add_tail Unexecuted instantiation: files-backend.c:list_add_tail Unexecuted instantiation: packed-backend.c:list_add_tail Unexecuted instantiation: system.c:list_add_tail Unexecuted instantiation: repo-settings.c:list_add_tail Unexecuted instantiation: repository.c:list_add_tail Unexecuted instantiation: revision.c:list_add_tail Unexecuted instantiation: setup.c:list_add_tail Unexecuted instantiation: shallow.c:list_add_tail Unexecuted instantiation: tag.c:list_add_tail Unexecuted instantiation: tempfile.c:list_add_tail Unexecuted instantiation: trailer.c:list_add_tail Unexecuted instantiation: wt-status.c:list_add_tail Unexecuted instantiation: bundle.c:list_add_tail Unexecuted instantiation: cache-tree.c:list_add_tail Unexecuted instantiation: chdir-notify.c:list_add_tail Unexecuted instantiation: commit-graph.c:list_add_tail Unexecuted instantiation: commit.c:list_add_tail Unexecuted instantiation: connected.c:list_add_tail Unexecuted instantiation: diff.c:list_add_tail Unexecuted instantiation: fetch-pack.c:list_add_tail Unexecuted instantiation: fsck.c:list_add_tail Unexecuted instantiation: gpg-interface.c:list_add_tail Unexecuted instantiation: list-objects.c:list_add_tail Unexecuted instantiation: loose.c:list_add_tail Unexecuted instantiation: midx.c:list_add_tail Unexecuted instantiation: pack-check.c:list_add_tail Unexecuted instantiation: pack-revindex.c:list_add_tail Unexecuted instantiation: range-diff.c:list_add_tail Unexecuted instantiation: send-pack.c:list_add_tail Unexecuted instantiation: sequencer.c:list_add_tail Unexecuted instantiation: transport-helper.c:list_add_tail Unexecuted instantiation: apply.c:list_add_tail Unexecuted instantiation: merge-ort-wrappers.c:list_add_tail Unexecuted instantiation: merge.c:list_add_tail Unexecuted instantiation: rerere.c:list_add_tail Unexecuted instantiation: reset.c:list_add_tail |
71 | | |
72 | | /* Remove element from list. */ |
73 | | static inline void __list_del(struct list_head *prev, struct list_head *next) |
74 | 0 | { |
75 | 0 | next->prev = prev; |
76 | 0 | prev->next = next; |
77 | 0 | } Unexecuted instantiation: run-command.c:__list_del Unexecuted instantiation: config.c:__list_del Unexecuted instantiation: lockfile.c:__list_del Unexecuted instantiation: object-file.c:__list_del Unexecuted instantiation: object-name.c:__list_del Unexecuted instantiation: odb.c:__list_del Unexecuted instantiation: streaming.c:__list_del Unexecuted instantiation: pack-write.c:__list_del Unexecuted instantiation: packfile.c:__list_del Unexecuted instantiation: path.c:__list_del Unexecuted instantiation: pretty.c:__list_del Unexecuted instantiation: promisor-remote.c:__list_del Unexecuted instantiation: read-cache.c:__list_del Unexecuted instantiation: refs.c:__list_del Unexecuted instantiation: files-backend.c:__list_del Unexecuted instantiation: packed-backend.c:__list_del Unexecuted instantiation: system.c:__list_del Unexecuted instantiation: repo-settings.c:__list_del Unexecuted instantiation: repository.c:__list_del Unexecuted instantiation: revision.c:__list_del Unexecuted instantiation: setup.c:__list_del Unexecuted instantiation: shallow.c:__list_del Unexecuted instantiation: tag.c:__list_del Unexecuted instantiation: tempfile.c:__list_del Unexecuted instantiation: trailer.c:__list_del Unexecuted instantiation: wt-status.c:__list_del Unexecuted instantiation: bundle.c:__list_del Unexecuted instantiation: cache-tree.c:__list_del Unexecuted instantiation: chdir-notify.c:__list_del Unexecuted instantiation: commit-graph.c:__list_del Unexecuted instantiation: commit.c:__list_del Unexecuted instantiation: connected.c:__list_del Unexecuted instantiation: diff.c:__list_del Unexecuted instantiation: fetch-pack.c:__list_del Unexecuted instantiation: fsck.c:__list_del Unexecuted instantiation: gpg-interface.c:__list_del Unexecuted instantiation: list-objects.c:__list_del Unexecuted instantiation: loose.c:__list_del Unexecuted instantiation: midx.c:__list_del Unexecuted instantiation: pack-check.c:__list_del Unexecuted instantiation: pack-revindex.c:__list_del Unexecuted instantiation: range-diff.c:__list_del Unexecuted instantiation: send-pack.c:__list_del Unexecuted instantiation: sequencer.c:__list_del Unexecuted instantiation: transport-helper.c:__list_del Unexecuted instantiation: apply.c:__list_del Unexecuted instantiation: merge-ort-wrappers.c:__list_del Unexecuted instantiation: merge.c:__list_del Unexecuted instantiation: rerere.c:__list_del Unexecuted instantiation: reset.c:__list_del |
78 | | |
79 | | /* Remove element from list. */ |
80 | | static inline void list_del(struct list_head *elem) |
81 | 0 | { |
82 | 0 | __list_del(elem->prev, elem->next); |
83 | 0 | } Unexecuted instantiation: run-command.c:list_del Unexecuted instantiation: config.c:list_del Unexecuted instantiation: lockfile.c:list_del Unexecuted instantiation: object-file.c:list_del Unexecuted instantiation: object-name.c:list_del Unexecuted instantiation: odb.c:list_del Unexecuted instantiation: streaming.c:list_del Unexecuted instantiation: pack-write.c:list_del Unexecuted instantiation: packfile.c:list_del Unexecuted instantiation: path.c:list_del Unexecuted instantiation: pretty.c:list_del Unexecuted instantiation: promisor-remote.c:list_del Unexecuted instantiation: read-cache.c:list_del Unexecuted instantiation: refs.c:list_del Unexecuted instantiation: files-backend.c:list_del Unexecuted instantiation: packed-backend.c:list_del Unexecuted instantiation: system.c:list_del Unexecuted instantiation: repo-settings.c:list_del Unexecuted instantiation: repository.c:list_del Unexecuted instantiation: revision.c:list_del Unexecuted instantiation: setup.c:list_del Unexecuted instantiation: shallow.c:list_del Unexecuted instantiation: tag.c:list_del Unexecuted instantiation: tempfile.c:list_del Unexecuted instantiation: trailer.c:list_del Unexecuted instantiation: wt-status.c:list_del Unexecuted instantiation: bundle.c:list_del Unexecuted instantiation: cache-tree.c:list_del Unexecuted instantiation: chdir-notify.c:list_del Unexecuted instantiation: commit-graph.c:list_del Unexecuted instantiation: commit.c:list_del Unexecuted instantiation: connected.c:list_del Unexecuted instantiation: diff.c:list_del Unexecuted instantiation: fetch-pack.c:list_del Unexecuted instantiation: fsck.c:list_del Unexecuted instantiation: gpg-interface.c:list_del Unexecuted instantiation: list-objects.c:list_del Unexecuted instantiation: loose.c:list_del Unexecuted instantiation: midx.c:list_del Unexecuted instantiation: pack-check.c:list_del Unexecuted instantiation: pack-revindex.c:list_del Unexecuted instantiation: range-diff.c:list_del Unexecuted instantiation: send-pack.c:list_del Unexecuted instantiation: sequencer.c:list_del Unexecuted instantiation: transport-helper.c:list_del Unexecuted instantiation: apply.c:list_del Unexecuted instantiation: merge-ort-wrappers.c:list_del Unexecuted instantiation: merge.c:list_del Unexecuted instantiation: rerere.c:list_del Unexecuted instantiation: reset.c:list_del |
84 | | |
85 | | /* Remove element from list, initializing the element's list pointers. */ |
86 | | static inline void list_del_init(struct list_head *elem) |
87 | 0 | { |
88 | 0 | list_del(elem); |
89 | 0 | INIT_LIST_HEAD(elem); |
90 | 0 | } Unexecuted instantiation: run-command.c:list_del_init Unexecuted instantiation: config.c:list_del_init Unexecuted instantiation: lockfile.c:list_del_init Unexecuted instantiation: object-file.c:list_del_init Unexecuted instantiation: object-name.c:list_del_init Unexecuted instantiation: odb.c:list_del_init Unexecuted instantiation: streaming.c:list_del_init Unexecuted instantiation: pack-write.c:list_del_init Unexecuted instantiation: packfile.c:list_del_init Unexecuted instantiation: path.c:list_del_init Unexecuted instantiation: pretty.c:list_del_init Unexecuted instantiation: promisor-remote.c:list_del_init Unexecuted instantiation: read-cache.c:list_del_init Unexecuted instantiation: refs.c:list_del_init Unexecuted instantiation: files-backend.c:list_del_init Unexecuted instantiation: packed-backend.c:list_del_init Unexecuted instantiation: system.c:list_del_init Unexecuted instantiation: repo-settings.c:list_del_init Unexecuted instantiation: repository.c:list_del_init Unexecuted instantiation: revision.c:list_del_init Unexecuted instantiation: setup.c:list_del_init Unexecuted instantiation: shallow.c:list_del_init Unexecuted instantiation: tag.c:list_del_init Unexecuted instantiation: tempfile.c:list_del_init Unexecuted instantiation: trailer.c:list_del_init Unexecuted instantiation: wt-status.c:list_del_init Unexecuted instantiation: bundle.c:list_del_init Unexecuted instantiation: cache-tree.c:list_del_init Unexecuted instantiation: chdir-notify.c:list_del_init Unexecuted instantiation: commit-graph.c:list_del_init Unexecuted instantiation: commit.c:list_del_init Unexecuted instantiation: connected.c:list_del_init Unexecuted instantiation: diff.c:list_del_init Unexecuted instantiation: fetch-pack.c:list_del_init Unexecuted instantiation: fsck.c:list_del_init Unexecuted instantiation: gpg-interface.c:list_del_init Unexecuted instantiation: list-objects.c:list_del_init Unexecuted instantiation: loose.c:list_del_init Unexecuted instantiation: midx.c:list_del_init Unexecuted instantiation: pack-check.c:list_del_init Unexecuted instantiation: pack-revindex.c:list_del_init Unexecuted instantiation: range-diff.c:list_del_init Unexecuted instantiation: send-pack.c:list_del_init Unexecuted instantiation: sequencer.c:list_del_init Unexecuted instantiation: transport-helper.c:list_del_init Unexecuted instantiation: apply.c:list_del_init Unexecuted instantiation: merge-ort-wrappers.c:list_del_init Unexecuted instantiation: merge.c:list_del_init Unexecuted instantiation: rerere.c:list_del_init Unexecuted instantiation: reset.c:list_del_init |
91 | | |
92 | | /* Delete from list, add to another list as head. */ |
93 | | static inline void list_move(struct list_head *elem, struct list_head *head) |
94 | 0 | { |
95 | 0 | __list_del(elem->prev, elem->next); |
96 | 0 | list_add(elem, head); |
97 | 0 | } Unexecuted instantiation: run-command.c:list_move Unexecuted instantiation: config.c:list_move Unexecuted instantiation: lockfile.c:list_move Unexecuted instantiation: object-file.c:list_move Unexecuted instantiation: object-name.c:list_move Unexecuted instantiation: odb.c:list_move Unexecuted instantiation: streaming.c:list_move Unexecuted instantiation: pack-write.c:list_move Unexecuted instantiation: packfile.c:list_move Unexecuted instantiation: path.c:list_move Unexecuted instantiation: pretty.c:list_move Unexecuted instantiation: promisor-remote.c:list_move Unexecuted instantiation: read-cache.c:list_move Unexecuted instantiation: refs.c:list_move Unexecuted instantiation: files-backend.c:list_move Unexecuted instantiation: packed-backend.c:list_move Unexecuted instantiation: system.c:list_move Unexecuted instantiation: repo-settings.c:list_move Unexecuted instantiation: repository.c:list_move Unexecuted instantiation: revision.c:list_move Unexecuted instantiation: setup.c:list_move Unexecuted instantiation: shallow.c:list_move Unexecuted instantiation: tag.c:list_move Unexecuted instantiation: tempfile.c:list_move Unexecuted instantiation: trailer.c:list_move Unexecuted instantiation: wt-status.c:list_move Unexecuted instantiation: bundle.c:list_move Unexecuted instantiation: cache-tree.c:list_move Unexecuted instantiation: chdir-notify.c:list_move Unexecuted instantiation: commit-graph.c:list_move Unexecuted instantiation: commit.c:list_move Unexecuted instantiation: connected.c:list_move Unexecuted instantiation: diff.c:list_move Unexecuted instantiation: fetch-pack.c:list_move Unexecuted instantiation: fsck.c:list_move Unexecuted instantiation: gpg-interface.c:list_move Unexecuted instantiation: list-objects.c:list_move Unexecuted instantiation: loose.c:list_move Unexecuted instantiation: midx.c:list_move Unexecuted instantiation: pack-check.c:list_move Unexecuted instantiation: pack-revindex.c:list_move Unexecuted instantiation: range-diff.c:list_move Unexecuted instantiation: send-pack.c:list_move Unexecuted instantiation: sequencer.c:list_move Unexecuted instantiation: transport-helper.c:list_move Unexecuted instantiation: apply.c:list_move Unexecuted instantiation: merge-ort-wrappers.c:list_move Unexecuted instantiation: merge.c:list_move Unexecuted instantiation: rerere.c:list_move Unexecuted instantiation: reset.c:list_move |
98 | | |
99 | | /* Replace an old entry. */ |
100 | | static inline void list_replace(struct list_head *old, struct list_head *newp) |
101 | 0 | { |
102 | 0 | newp->next = old->next; |
103 | 0 | newp->prev = old->prev; |
104 | 0 | newp->prev->next = newp; |
105 | 0 | newp->next->prev = newp; |
106 | 0 | } Unexecuted instantiation: run-command.c:list_replace Unexecuted instantiation: config.c:list_replace Unexecuted instantiation: lockfile.c:list_replace Unexecuted instantiation: object-file.c:list_replace Unexecuted instantiation: object-name.c:list_replace Unexecuted instantiation: odb.c:list_replace Unexecuted instantiation: streaming.c:list_replace Unexecuted instantiation: pack-write.c:list_replace Unexecuted instantiation: packfile.c:list_replace Unexecuted instantiation: path.c:list_replace Unexecuted instantiation: pretty.c:list_replace Unexecuted instantiation: promisor-remote.c:list_replace Unexecuted instantiation: read-cache.c:list_replace Unexecuted instantiation: refs.c:list_replace Unexecuted instantiation: files-backend.c:list_replace Unexecuted instantiation: packed-backend.c:list_replace Unexecuted instantiation: system.c:list_replace Unexecuted instantiation: repo-settings.c:list_replace Unexecuted instantiation: repository.c:list_replace Unexecuted instantiation: revision.c:list_replace Unexecuted instantiation: setup.c:list_replace Unexecuted instantiation: shallow.c:list_replace Unexecuted instantiation: tag.c:list_replace Unexecuted instantiation: tempfile.c:list_replace Unexecuted instantiation: trailer.c:list_replace Unexecuted instantiation: wt-status.c:list_replace Unexecuted instantiation: bundle.c:list_replace Unexecuted instantiation: cache-tree.c:list_replace Unexecuted instantiation: chdir-notify.c:list_replace Unexecuted instantiation: commit-graph.c:list_replace Unexecuted instantiation: commit.c:list_replace Unexecuted instantiation: connected.c:list_replace Unexecuted instantiation: diff.c:list_replace Unexecuted instantiation: fetch-pack.c:list_replace Unexecuted instantiation: fsck.c:list_replace Unexecuted instantiation: gpg-interface.c:list_replace Unexecuted instantiation: list-objects.c:list_replace Unexecuted instantiation: loose.c:list_replace Unexecuted instantiation: midx.c:list_replace Unexecuted instantiation: pack-check.c:list_replace Unexecuted instantiation: pack-revindex.c:list_replace Unexecuted instantiation: range-diff.c:list_replace Unexecuted instantiation: send-pack.c:list_replace Unexecuted instantiation: sequencer.c:list_replace Unexecuted instantiation: transport-helper.c:list_replace Unexecuted instantiation: apply.c:list_replace Unexecuted instantiation: merge-ort-wrappers.c:list_replace Unexecuted instantiation: merge.c:list_replace Unexecuted instantiation: rerere.c:list_replace Unexecuted instantiation: reset.c:list_replace |
107 | | |
108 | | /* Join two lists. */ |
109 | | static inline void list_splice(struct list_head *add, struct list_head *head) |
110 | 0 | { |
111 | 0 | /* Do nothing if the list which gets added is empty. */ |
112 | 0 | if (add != add->next) { |
113 | 0 | add->next->prev = head; |
114 | 0 | add->prev->next = head->next; |
115 | 0 | head->next->prev = add->prev; |
116 | 0 | head->next = add->next; |
117 | 0 | } |
118 | 0 | } Unexecuted instantiation: run-command.c:list_splice Unexecuted instantiation: config.c:list_splice Unexecuted instantiation: lockfile.c:list_splice Unexecuted instantiation: object-file.c:list_splice Unexecuted instantiation: object-name.c:list_splice Unexecuted instantiation: odb.c:list_splice Unexecuted instantiation: streaming.c:list_splice Unexecuted instantiation: pack-write.c:list_splice Unexecuted instantiation: packfile.c:list_splice Unexecuted instantiation: path.c:list_splice Unexecuted instantiation: pretty.c:list_splice Unexecuted instantiation: promisor-remote.c:list_splice Unexecuted instantiation: read-cache.c:list_splice Unexecuted instantiation: refs.c:list_splice Unexecuted instantiation: files-backend.c:list_splice Unexecuted instantiation: packed-backend.c:list_splice Unexecuted instantiation: system.c:list_splice Unexecuted instantiation: repo-settings.c:list_splice Unexecuted instantiation: repository.c:list_splice Unexecuted instantiation: revision.c:list_splice Unexecuted instantiation: setup.c:list_splice Unexecuted instantiation: shallow.c:list_splice Unexecuted instantiation: tag.c:list_splice Unexecuted instantiation: tempfile.c:list_splice Unexecuted instantiation: trailer.c:list_splice Unexecuted instantiation: wt-status.c:list_splice Unexecuted instantiation: bundle.c:list_splice Unexecuted instantiation: cache-tree.c:list_splice Unexecuted instantiation: chdir-notify.c:list_splice Unexecuted instantiation: commit-graph.c:list_splice Unexecuted instantiation: commit.c:list_splice Unexecuted instantiation: connected.c:list_splice Unexecuted instantiation: diff.c:list_splice Unexecuted instantiation: fetch-pack.c:list_splice Unexecuted instantiation: fsck.c:list_splice Unexecuted instantiation: gpg-interface.c:list_splice Unexecuted instantiation: list-objects.c:list_splice Unexecuted instantiation: loose.c:list_splice Unexecuted instantiation: midx.c:list_splice Unexecuted instantiation: pack-check.c:list_splice Unexecuted instantiation: pack-revindex.c:list_splice Unexecuted instantiation: range-diff.c:list_splice Unexecuted instantiation: send-pack.c:list_splice Unexecuted instantiation: sequencer.c:list_splice Unexecuted instantiation: transport-helper.c:list_splice Unexecuted instantiation: apply.c:list_splice Unexecuted instantiation: merge-ort-wrappers.c:list_splice Unexecuted instantiation: merge.c:list_splice Unexecuted instantiation: rerere.c:list_splice Unexecuted instantiation: reset.c:list_splice |
119 | | |
120 | | /* Get typed element from list at a given position. */ |
121 | | #define list_entry(ptr, type, member) \ |
122 | 0 | ((type *) ((char *) (ptr) - offsetof(type, member))) |
123 | | |
124 | | /* Get first entry from a list. */ |
125 | | #define list_first_entry(ptr, type, member) \ |
126 | | list_entry((ptr)->next, type, member) |
127 | | |
128 | | /* Iterate forward over the elements of the list. */ |
129 | | #define list_for_each(pos, head) \ |
130 | 0 | for (pos = (head)->next; pos != (head); pos = pos->next) |
131 | | |
132 | | /* |
133 | | * Iterate forward over the elements list. The list elements can be |
134 | | * removed from the list while doing this. |
135 | | */ |
136 | | #define list_for_each_safe(pos, p, head) \ |
137 | 0 | for (pos = (head)->next, p = pos->next; \ |
138 | 0 | pos != (head); \ |
139 | 0 | pos = p, p = pos->next) |
140 | | |
141 | | /* Iterate backward over the elements of the list. */ |
142 | | #define list_for_each_prev(pos, head) \ |
143 | | for (pos = (head)->prev; pos != (head); pos = pos->prev) |
144 | | |
145 | | /* |
146 | | * Iterate backwards over the elements list. The list elements can be |
147 | | * removed from the list while doing this. |
148 | | */ |
149 | | #define list_for_each_prev_safe(pos, p, head) \ |
150 | | for (pos = (head)->prev, p = pos->prev; \ |
151 | | pos != (head); \ |
152 | | pos = p, p = pos->prev) |
153 | | |
154 | | static inline int list_empty(struct list_head *head) |
155 | 0 | { |
156 | 0 | return head == head->next; |
157 | 0 | } Unexecuted instantiation: run-command.c:list_empty Unexecuted instantiation: config.c:list_empty Unexecuted instantiation: lockfile.c:list_empty Unexecuted instantiation: object-file.c:list_empty Unexecuted instantiation: object-name.c:list_empty Unexecuted instantiation: odb.c:list_empty Unexecuted instantiation: streaming.c:list_empty Unexecuted instantiation: pack-write.c:list_empty Unexecuted instantiation: packfile.c:list_empty Unexecuted instantiation: path.c:list_empty Unexecuted instantiation: pretty.c:list_empty Unexecuted instantiation: promisor-remote.c:list_empty Unexecuted instantiation: read-cache.c:list_empty Unexecuted instantiation: refs.c:list_empty Unexecuted instantiation: files-backend.c:list_empty Unexecuted instantiation: packed-backend.c:list_empty Unexecuted instantiation: system.c:list_empty Unexecuted instantiation: repo-settings.c:list_empty Unexecuted instantiation: repository.c:list_empty Unexecuted instantiation: revision.c:list_empty Unexecuted instantiation: setup.c:list_empty Unexecuted instantiation: shallow.c:list_empty Unexecuted instantiation: tag.c:list_empty Unexecuted instantiation: tempfile.c:list_empty Unexecuted instantiation: trailer.c:list_empty Unexecuted instantiation: wt-status.c:list_empty Unexecuted instantiation: bundle.c:list_empty Unexecuted instantiation: cache-tree.c:list_empty Unexecuted instantiation: chdir-notify.c:list_empty Unexecuted instantiation: commit-graph.c:list_empty Unexecuted instantiation: commit.c:list_empty Unexecuted instantiation: connected.c:list_empty Unexecuted instantiation: diff.c:list_empty Unexecuted instantiation: fetch-pack.c:list_empty Unexecuted instantiation: fsck.c:list_empty Unexecuted instantiation: gpg-interface.c:list_empty Unexecuted instantiation: list-objects.c:list_empty Unexecuted instantiation: loose.c:list_empty Unexecuted instantiation: midx.c:list_empty Unexecuted instantiation: pack-check.c:list_empty Unexecuted instantiation: pack-revindex.c:list_empty Unexecuted instantiation: range-diff.c:list_empty Unexecuted instantiation: send-pack.c:list_empty Unexecuted instantiation: sequencer.c:list_empty Unexecuted instantiation: transport-helper.c:list_empty Unexecuted instantiation: apply.c:list_empty Unexecuted instantiation: merge-ort-wrappers.c:list_empty Unexecuted instantiation: merge.c:list_empty Unexecuted instantiation: rerere.c:list_empty Unexecuted instantiation: reset.c:list_empty |
158 | | |
159 | | static inline void list_replace_init(struct list_head *old, |
160 | | struct list_head *newp) |
161 | 0 | { |
162 | 0 | struct list_head *head = old->next; |
163 | 0 |
|
164 | 0 | list_del(old); |
165 | 0 | list_add_tail(newp, head); |
166 | 0 | INIT_LIST_HEAD(old); |
167 | 0 | } Unexecuted instantiation: run-command.c:list_replace_init Unexecuted instantiation: config.c:list_replace_init Unexecuted instantiation: lockfile.c:list_replace_init Unexecuted instantiation: object-file.c:list_replace_init Unexecuted instantiation: object-name.c:list_replace_init Unexecuted instantiation: odb.c:list_replace_init Unexecuted instantiation: streaming.c:list_replace_init Unexecuted instantiation: pack-write.c:list_replace_init Unexecuted instantiation: packfile.c:list_replace_init Unexecuted instantiation: path.c:list_replace_init Unexecuted instantiation: pretty.c:list_replace_init Unexecuted instantiation: promisor-remote.c:list_replace_init Unexecuted instantiation: read-cache.c:list_replace_init Unexecuted instantiation: refs.c:list_replace_init Unexecuted instantiation: files-backend.c:list_replace_init Unexecuted instantiation: packed-backend.c:list_replace_init Unexecuted instantiation: system.c:list_replace_init Unexecuted instantiation: repo-settings.c:list_replace_init Unexecuted instantiation: repository.c:list_replace_init Unexecuted instantiation: revision.c:list_replace_init Unexecuted instantiation: setup.c:list_replace_init Unexecuted instantiation: shallow.c:list_replace_init Unexecuted instantiation: tag.c:list_replace_init Unexecuted instantiation: tempfile.c:list_replace_init Unexecuted instantiation: trailer.c:list_replace_init Unexecuted instantiation: wt-status.c:list_replace_init Unexecuted instantiation: bundle.c:list_replace_init Unexecuted instantiation: cache-tree.c:list_replace_init Unexecuted instantiation: chdir-notify.c:list_replace_init Unexecuted instantiation: commit-graph.c:list_replace_init Unexecuted instantiation: commit.c:list_replace_init Unexecuted instantiation: connected.c:list_replace_init Unexecuted instantiation: diff.c:list_replace_init Unexecuted instantiation: fetch-pack.c:list_replace_init Unexecuted instantiation: fsck.c:list_replace_init Unexecuted instantiation: gpg-interface.c:list_replace_init Unexecuted instantiation: list-objects.c:list_replace_init Unexecuted instantiation: loose.c:list_replace_init Unexecuted instantiation: midx.c:list_replace_init Unexecuted instantiation: pack-check.c:list_replace_init Unexecuted instantiation: pack-revindex.c:list_replace_init Unexecuted instantiation: range-diff.c:list_replace_init Unexecuted instantiation: send-pack.c:list_replace_init Unexecuted instantiation: sequencer.c:list_replace_init Unexecuted instantiation: transport-helper.c:list_replace_init Unexecuted instantiation: apply.c:list_replace_init Unexecuted instantiation: merge-ort-wrappers.c:list_replace_init Unexecuted instantiation: merge.c:list_replace_init Unexecuted instantiation: rerere.c:list_replace_init Unexecuted instantiation: reset.c:list_replace_init |
168 | | |
169 | | /* |
170 | | * This is exactly the same as a normal list_head, except that it can be |
171 | | * declared volatile (e.g., if you have a list that may be accessed from signal |
172 | | * handlers). |
173 | | */ |
174 | | struct volatile_list_head { |
175 | | volatile struct volatile_list_head *next, *prev; |
176 | | }; |
177 | | |
178 | | #define VOLATILE_LIST_HEAD(name) \ |
179 | | volatile struct volatile_list_head name = { &(name), &(name) } |
180 | | |
181 | | static inline void __volatile_list_del(volatile struct volatile_list_head *prev, |
182 | | volatile struct volatile_list_head *next) |
183 | 0 | { |
184 | 0 | next->prev = prev; |
185 | 0 | prev->next = next; |
186 | 0 | } Unexecuted instantiation: run-command.c:__volatile_list_del Unexecuted instantiation: config.c:__volatile_list_del Unexecuted instantiation: lockfile.c:__volatile_list_del Unexecuted instantiation: object-file.c:__volatile_list_del Unexecuted instantiation: object-name.c:__volatile_list_del Unexecuted instantiation: odb.c:__volatile_list_del Unexecuted instantiation: streaming.c:__volatile_list_del Unexecuted instantiation: pack-write.c:__volatile_list_del Unexecuted instantiation: packfile.c:__volatile_list_del Unexecuted instantiation: path.c:__volatile_list_del Unexecuted instantiation: pretty.c:__volatile_list_del Unexecuted instantiation: promisor-remote.c:__volatile_list_del Unexecuted instantiation: read-cache.c:__volatile_list_del Unexecuted instantiation: refs.c:__volatile_list_del Unexecuted instantiation: files-backend.c:__volatile_list_del Unexecuted instantiation: packed-backend.c:__volatile_list_del Unexecuted instantiation: system.c:__volatile_list_del Unexecuted instantiation: repo-settings.c:__volatile_list_del Unexecuted instantiation: repository.c:__volatile_list_del Unexecuted instantiation: revision.c:__volatile_list_del Unexecuted instantiation: setup.c:__volatile_list_del Unexecuted instantiation: shallow.c:__volatile_list_del Unexecuted instantiation: tag.c:__volatile_list_del Unexecuted instantiation: tempfile.c:__volatile_list_del Unexecuted instantiation: trailer.c:__volatile_list_del Unexecuted instantiation: wt-status.c:__volatile_list_del Unexecuted instantiation: bundle.c:__volatile_list_del Unexecuted instantiation: cache-tree.c:__volatile_list_del Unexecuted instantiation: chdir-notify.c:__volatile_list_del Unexecuted instantiation: commit-graph.c:__volatile_list_del Unexecuted instantiation: commit.c:__volatile_list_del Unexecuted instantiation: connected.c:__volatile_list_del Unexecuted instantiation: diff.c:__volatile_list_del Unexecuted instantiation: fetch-pack.c:__volatile_list_del Unexecuted instantiation: fsck.c:__volatile_list_del Unexecuted instantiation: gpg-interface.c:__volatile_list_del Unexecuted instantiation: list-objects.c:__volatile_list_del Unexecuted instantiation: loose.c:__volatile_list_del Unexecuted instantiation: midx.c:__volatile_list_del Unexecuted instantiation: pack-check.c:__volatile_list_del Unexecuted instantiation: pack-revindex.c:__volatile_list_del Unexecuted instantiation: range-diff.c:__volatile_list_del Unexecuted instantiation: send-pack.c:__volatile_list_del Unexecuted instantiation: sequencer.c:__volatile_list_del Unexecuted instantiation: transport-helper.c:__volatile_list_del Unexecuted instantiation: apply.c:__volatile_list_del Unexecuted instantiation: merge-ort-wrappers.c:__volatile_list_del Unexecuted instantiation: merge.c:__volatile_list_del Unexecuted instantiation: rerere.c:__volatile_list_del Unexecuted instantiation: reset.c:__volatile_list_del |
187 | | |
188 | | static inline void volatile_list_del(volatile struct volatile_list_head *elem) |
189 | 0 | { |
190 | 0 | __volatile_list_del(elem->prev, elem->next); |
191 | 0 | } Unexecuted instantiation: run-command.c:volatile_list_del Unexecuted instantiation: config.c:volatile_list_del Unexecuted instantiation: lockfile.c:volatile_list_del Unexecuted instantiation: object-file.c:volatile_list_del Unexecuted instantiation: object-name.c:volatile_list_del Unexecuted instantiation: odb.c:volatile_list_del Unexecuted instantiation: streaming.c:volatile_list_del Unexecuted instantiation: pack-write.c:volatile_list_del Unexecuted instantiation: packfile.c:volatile_list_del Unexecuted instantiation: path.c:volatile_list_del Unexecuted instantiation: pretty.c:volatile_list_del Unexecuted instantiation: promisor-remote.c:volatile_list_del Unexecuted instantiation: read-cache.c:volatile_list_del Unexecuted instantiation: refs.c:volatile_list_del Unexecuted instantiation: files-backend.c:volatile_list_del Unexecuted instantiation: packed-backend.c:volatile_list_del Unexecuted instantiation: system.c:volatile_list_del Unexecuted instantiation: repo-settings.c:volatile_list_del Unexecuted instantiation: repository.c:volatile_list_del Unexecuted instantiation: revision.c:volatile_list_del Unexecuted instantiation: setup.c:volatile_list_del Unexecuted instantiation: shallow.c:volatile_list_del Unexecuted instantiation: tag.c:volatile_list_del Unexecuted instantiation: tempfile.c:volatile_list_del Unexecuted instantiation: trailer.c:volatile_list_del Unexecuted instantiation: wt-status.c:volatile_list_del Unexecuted instantiation: bundle.c:volatile_list_del Unexecuted instantiation: cache-tree.c:volatile_list_del Unexecuted instantiation: chdir-notify.c:volatile_list_del Unexecuted instantiation: commit-graph.c:volatile_list_del Unexecuted instantiation: commit.c:volatile_list_del Unexecuted instantiation: connected.c:volatile_list_del Unexecuted instantiation: diff.c:volatile_list_del Unexecuted instantiation: fetch-pack.c:volatile_list_del Unexecuted instantiation: fsck.c:volatile_list_del Unexecuted instantiation: gpg-interface.c:volatile_list_del Unexecuted instantiation: list-objects.c:volatile_list_del Unexecuted instantiation: loose.c:volatile_list_del Unexecuted instantiation: midx.c:volatile_list_del Unexecuted instantiation: pack-check.c:volatile_list_del Unexecuted instantiation: pack-revindex.c:volatile_list_del Unexecuted instantiation: range-diff.c:volatile_list_del Unexecuted instantiation: send-pack.c:volatile_list_del Unexecuted instantiation: sequencer.c:volatile_list_del Unexecuted instantiation: transport-helper.c:volatile_list_del Unexecuted instantiation: apply.c:volatile_list_del Unexecuted instantiation: merge-ort-wrappers.c:volatile_list_del Unexecuted instantiation: merge.c:volatile_list_del Unexecuted instantiation: rerere.c:volatile_list_del Unexecuted instantiation: reset.c:volatile_list_del |
192 | | |
193 | | static inline int volatile_list_empty(volatile struct volatile_list_head *head) |
194 | 0 | { |
195 | 0 | return head == head->next; |
196 | 0 | } Unexecuted instantiation: run-command.c:volatile_list_empty Unexecuted instantiation: config.c:volatile_list_empty Unexecuted instantiation: lockfile.c:volatile_list_empty Unexecuted instantiation: object-file.c:volatile_list_empty Unexecuted instantiation: object-name.c:volatile_list_empty Unexecuted instantiation: odb.c:volatile_list_empty Unexecuted instantiation: streaming.c:volatile_list_empty Unexecuted instantiation: pack-write.c:volatile_list_empty Unexecuted instantiation: packfile.c:volatile_list_empty Unexecuted instantiation: path.c:volatile_list_empty Unexecuted instantiation: pretty.c:volatile_list_empty Unexecuted instantiation: promisor-remote.c:volatile_list_empty Unexecuted instantiation: read-cache.c:volatile_list_empty Unexecuted instantiation: refs.c:volatile_list_empty Unexecuted instantiation: files-backend.c:volatile_list_empty Unexecuted instantiation: packed-backend.c:volatile_list_empty Unexecuted instantiation: system.c:volatile_list_empty Unexecuted instantiation: repo-settings.c:volatile_list_empty Unexecuted instantiation: repository.c:volatile_list_empty Unexecuted instantiation: revision.c:volatile_list_empty Unexecuted instantiation: setup.c:volatile_list_empty Unexecuted instantiation: shallow.c:volatile_list_empty Unexecuted instantiation: tag.c:volatile_list_empty Unexecuted instantiation: tempfile.c:volatile_list_empty Unexecuted instantiation: trailer.c:volatile_list_empty Unexecuted instantiation: wt-status.c:volatile_list_empty Unexecuted instantiation: bundle.c:volatile_list_empty Unexecuted instantiation: cache-tree.c:volatile_list_empty Unexecuted instantiation: chdir-notify.c:volatile_list_empty Unexecuted instantiation: commit-graph.c:volatile_list_empty Unexecuted instantiation: commit.c:volatile_list_empty Unexecuted instantiation: connected.c:volatile_list_empty Unexecuted instantiation: diff.c:volatile_list_empty Unexecuted instantiation: fetch-pack.c:volatile_list_empty Unexecuted instantiation: fsck.c:volatile_list_empty Unexecuted instantiation: gpg-interface.c:volatile_list_empty Unexecuted instantiation: list-objects.c:volatile_list_empty Unexecuted instantiation: loose.c:volatile_list_empty Unexecuted instantiation: midx.c:volatile_list_empty Unexecuted instantiation: pack-check.c:volatile_list_empty Unexecuted instantiation: pack-revindex.c:volatile_list_empty Unexecuted instantiation: range-diff.c:volatile_list_empty Unexecuted instantiation: send-pack.c:volatile_list_empty Unexecuted instantiation: sequencer.c:volatile_list_empty Unexecuted instantiation: transport-helper.c:volatile_list_empty Unexecuted instantiation: apply.c:volatile_list_empty Unexecuted instantiation: merge-ort-wrappers.c:volatile_list_empty Unexecuted instantiation: merge.c:volatile_list_empty Unexecuted instantiation: rerere.c:volatile_list_empty Unexecuted instantiation: reset.c:volatile_list_empty |
197 | | |
198 | | static inline void volatile_list_add(volatile struct volatile_list_head *newp, |
199 | | volatile struct volatile_list_head *head) |
200 | 0 | { |
201 | 0 | head->next->prev = newp; |
202 | 0 | newp->next = head->next; |
203 | 0 | newp->prev = head; |
204 | 0 | head->next = newp; |
205 | 0 | } Unexecuted instantiation: run-command.c:volatile_list_add Unexecuted instantiation: config.c:volatile_list_add Unexecuted instantiation: lockfile.c:volatile_list_add Unexecuted instantiation: object-file.c:volatile_list_add Unexecuted instantiation: object-name.c:volatile_list_add Unexecuted instantiation: odb.c:volatile_list_add Unexecuted instantiation: streaming.c:volatile_list_add Unexecuted instantiation: pack-write.c:volatile_list_add Unexecuted instantiation: packfile.c:volatile_list_add Unexecuted instantiation: path.c:volatile_list_add Unexecuted instantiation: pretty.c:volatile_list_add Unexecuted instantiation: promisor-remote.c:volatile_list_add Unexecuted instantiation: read-cache.c:volatile_list_add Unexecuted instantiation: refs.c:volatile_list_add Unexecuted instantiation: files-backend.c:volatile_list_add Unexecuted instantiation: packed-backend.c:volatile_list_add Unexecuted instantiation: system.c:volatile_list_add Unexecuted instantiation: repo-settings.c:volatile_list_add Unexecuted instantiation: repository.c:volatile_list_add Unexecuted instantiation: revision.c:volatile_list_add Unexecuted instantiation: setup.c:volatile_list_add Unexecuted instantiation: shallow.c:volatile_list_add Unexecuted instantiation: tag.c:volatile_list_add Unexecuted instantiation: tempfile.c:volatile_list_add Unexecuted instantiation: trailer.c:volatile_list_add Unexecuted instantiation: wt-status.c:volatile_list_add Unexecuted instantiation: bundle.c:volatile_list_add Unexecuted instantiation: cache-tree.c:volatile_list_add Unexecuted instantiation: chdir-notify.c:volatile_list_add Unexecuted instantiation: commit-graph.c:volatile_list_add Unexecuted instantiation: commit.c:volatile_list_add Unexecuted instantiation: connected.c:volatile_list_add Unexecuted instantiation: diff.c:volatile_list_add Unexecuted instantiation: fetch-pack.c:volatile_list_add Unexecuted instantiation: fsck.c:volatile_list_add Unexecuted instantiation: gpg-interface.c:volatile_list_add Unexecuted instantiation: list-objects.c:volatile_list_add Unexecuted instantiation: loose.c:volatile_list_add Unexecuted instantiation: midx.c:volatile_list_add Unexecuted instantiation: pack-check.c:volatile_list_add Unexecuted instantiation: pack-revindex.c:volatile_list_add Unexecuted instantiation: range-diff.c:volatile_list_add Unexecuted instantiation: send-pack.c:volatile_list_add Unexecuted instantiation: sequencer.c:volatile_list_add Unexecuted instantiation: transport-helper.c:volatile_list_add Unexecuted instantiation: apply.c:volatile_list_add Unexecuted instantiation: merge-ort-wrappers.c:volatile_list_add Unexecuted instantiation: merge.c:volatile_list_add Unexecuted instantiation: rerere.c:volatile_list_add Unexecuted instantiation: reset.c:volatile_list_add |
206 | | |
207 | | #endif /* LIST_H */ |