/src/haproxy/include/import/ebtree.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Elastic Binary Trees - generic macros and structures. |
3 | | * Version 6.0.6 |
4 | | * (C) 2002-2011 - Willy Tarreau <w@1wt.eu> |
5 | | * |
6 | | * This library is free software; you can redistribute it and/or |
7 | | * modify it under the terms of the GNU Lesser General Public |
8 | | * License as published by the Free Software Foundation, version 2.1 |
9 | | * exclusively. |
10 | | * |
11 | | * This library is distributed in the hope that it will be useful, |
12 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | | * Lesser General Public License for more details. |
15 | | * |
16 | | * You should have received a copy of the GNU Lesser General Public |
17 | | * License along with this library; if not, write to the Free Software |
18 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | | */ |
20 | | |
21 | | |
22 | | |
23 | | /* |
24 | | General idea: |
25 | | ------------- |
26 | | In a radix binary tree, we may have up to 2N-1 nodes for N keys if all of |
27 | | them are leaves. If we find a way to differentiate intermediate nodes (later |
28 | | called "nodes") and final nodes (later called "leaves"), and we associate |
29 | | them by two, it is possible to build sort of a self-contained radix tree with |
30 | | intermediate nodes always present. It will not be as cheap as the ultree for |
31 | | optimal cases as shown below, but the optimal case almost never happens : |
32 | | |
33 | | Eg, to store 8, 10, 12, 13, 14 : |
34 | | |
35 | | ultree this theoretical tree |
36 | | |
37 | | 8 8 |
38 | | / \ / \ |
39 | | 10 12 10 12 |
40 | | / \ / \ |
41 | | 13 14 12 14 |
42 | | / \ |
43 | | 12 13 |
44 | | |
45 | | Note that on real-world tests (with a scheduler), is was verified that the |
46 | | case with data on an intermediate node never happens. This is because the |
47 | | data spectrum is too large for such coincidences to happen. It would require |
48 | | for instance that a task has its expiration time at an exact second, with |
49 | | other tasks sharing that second. This is too rare to try to optimize for it. |
50 | | |
51 | | What is interesting is that the node will only be added above the leaf when |
52 | | necessary, which implies that it will always remain somewhere above it. So |
53 | | both the leaf and the node can share the exact value of the leaf, because |
54 | | when going down the node, the bit mask will be applied to comparisons. So we |
55 | | are tempted to have one single key shared between the node and the leaf. |
56 | | |
57 | | The bit only serves the nodes, and the dups only serve the leaves. So we can |
58 | | put a lot of information in common. This results in one single entity with |
59 | | two branch pointers and two parent pointers, one for the node part, and one |
60 | | for the leaf part : |
61 | | |
62 | | node's leaf's |
63 | | parent parent |
64 | | | | |
65 | | [node] [leaf] |
66 | | / \ |
67 | | left right |
68 | | branch branch |
69 | | |
70 | | The node may very well refer to its leaf counterpart in one of its branches, |
71 | | indicating that its own leaf is just below it : |
72 | | |
73 | | node's |
74 | | parent |
75 | | | |
76 | | [node] |
77 | | / \ |
78 | | left [leaf] |
79 | | branch |
80 | | |
81 | | Adding keys in such a tree simply consists in inserting nodes between |
82 | | other nodes and/or leaves : |
83 | | |
84 | | [root] |
85 | | | |
86 | | [node2] |
87 | | / \ |
88 | | [leaf1] [node3] |
89 | | / \ |
90 | | [leaf2] [leaf3] |
91 | | |
92 | | On this diagram, we notice that [node2] and [leaf2] have been pulled away |
93 | | from each other due to the insertion of [node3], just as if there would be |
94 | | an elastic between both parts. This elastic-like behaviour gave its name to |
95 | | the tree : "Elastic Binary Tree", or "EBtree". The entity which associates a |
96 | | node part and a leaf part will be called an "EB node". |
97 | | |
98 | | We also notice on the diagram that there is a root entity required to attach |
99 | | the tree. It only contains two branches and there is nothing above it. This |
100 | | is an "EB root". Some will note that [leaf1] has no [node1]. One property of |
101 | | the EBtree is that all nodes have their branches filled, and that if a node |
102 | | has only one branch, it does not need to exist. Here, [leaf1] was added |
103 | | below [root] and did not need any node. |
104 | | |
105 | | An EB node contains : |
106 | | - a pointer to the node's parent (node_p) |
107 | | - a pointer to the leaf's parent (leaf_p) |
108 | | - two branches pointing to lower nodes or leaves (branches) |
109 | | - a bit position (bit) |
110 | | - an optional key. |
111 | | |
112 | | The key here is optional because it's used only during insertion, in order |
113 | | to classify the nodes. Nothing else in the tree structure requires knowledge |
114 | | of the key. This makes it possible to write type-agnostic primitives for |
115 | | everything, and type-specific insertion primitives. This has led to consider |
116 | | two types of EB nodes. The type-agnostic ones will serve as a header for the |
117 | | other ones, and will simply be called "struct eb_node". The other ones will |
118 | | have their type indicated in the structure name. Eg: "struct eb32_node" for |
119 | | nodes carrying 32 bit keys. |
120 | | |
121 | | We will also node that the two branches in a node serve exactly the same |
122 | | purpose as an EB root. For this reason, a "struct eb_root" will be used as |
123 | | well inside the struct eb_node. In order to ease pointer manipulation and |
124 | | ROOT detection when walking upwards, all the pointers inside an eb_node will |
125 | | point to the eb_root part of the referenced EB nodes, relying on the same |
126 | | principle as the linked lists in Linux. |
127 | | |
128 | | Another important point to note, is that when walking inside a tree, it is |
129 | | very convenient to know where a node is attached in its parent, and what |
130 | | type of branch it has below it (leaf or node). In order to simplify the |
131 | | operations and to speed up the processing, it was decided in this specific |
132 | | implementation to use the lowest bit from the pointer to designate the side |
133 | | of the upper pointers (left/right) and the type of a branch (leaf/node). |
134 | | This practise is not mandatory by design, but an implementation-specific |
135 | | optimisation permitted on all platforms on which data must be aligned. All |
136 | | known 32 bit platforms align their integers and pointers to 32 bits, leaving |
137 | | the two lower bits unused. So, we say that the pointers are "tagged". And |
138 | | since they designate pointers to root parts, we simply call them |
139 | | "tagged root pointers", or "eb_troot" in the code. |
140 | | |
141 | | Duplicate keys are stored in a special manner. When inserting a key, if |
142 | | the same one is found, then an incremental binary tree is built at this |
143 | | place from these keys. This ensures that no special case has to be written |
144 | | to handle duplicates when walking through the tree or when deleting entries. |
145 | | It also guarantees that duplicates will be walked in the exact same order |
146 | | they were inserted. This is very important when trying to achieve fair |
147 | | processing distribution for instance. |
148 | | |
149 | | Algorithmic complexity can be derived from 3 variables : |
150 | | - the number of possible different keys in the tree : P |
151 | | - the number of entries in the tree : N |
152 | | - the number of duplicates for one key : D |
153 | | |
154 | | Note that this tree is deliberately NOT balanced. For this reason, the worst |
155 | | case may happen with a small tree (eg: 32 distinct keys of one bit). BUT, |
156 | | the operations required to manage such data are so much cheap that they make |
157 | | it worth using it even under such conditions. For instance, a balanced tree |
158 | | may require only 6 levels to store those 32 keys when this tree will |
159 | | require 32. But if per-level operations are 5 times cheaper, it wins. |
160 | | |
161 | | Minimal, Maximal and Average times are specified in number of operations. |
162 | | Minimal is given for best condition, Maximal for worst condition, and the |
163 | | average is reported for a tree containing random keys. An operation |
164 | | generally consists in jumping from one node to the other. |
165 | | |
166 | | Complexity : |
167 | | - lookup : min=1, max=log(P), avg=log(N) |
168 | | - insertion from root : min=1, max=log(P), avg=log(N) |
169 | | - insertion of dups : min=1, max=log(D), avg=log(D)/2 after lookup |
170 | | - deletion : min=1, max=1, avg=1 |
171 | | - prev/next : min=1, max=log(P), avg=2 : |
172 | | N/2 nodes need 1 hop => 1*N/2 |
173 | | N/4 nodes need 2 hops => 2*N/4 |
174 | | N/8 nodes need 3 hops => 3*N/8 |
175 | | ... |
176 | | N/x nodes need log(x) hops => log2(x)*N/x |
177 | | Total cost for all N nodes : sum[i=1..N](log2(i)*N/i) = N*sum[i=1..N](log2(i)/i) |
178 | | Average cost across N nodes = total / N = sum[i=1..N](log2(i)/i) = 2 |
179 | | |
180 | | This design is currently limited to only two branches per node. Most of the |
181 | | tree descent algorithm would be compatible with more branches (eg: 4, to cut |
182 | | the height in half), but this would probably require more complex operations |
183 | | and the deletion algorithm would be problematic. |
184 | | |
185 | | Useful properties : |
186 | | - a node is always added above the leaf it is tied to, and never can get |
187 | | below nor in another branch. This implies that leaves directly attached |
188 | | to the root do not use their node part, which is indicated by a NULL |
189 | | value in node_p. This also enhances the cache efficiency when walking |
190 | | down the tree, because when the leaf is reached, its node part will |
191 | | already have been visited (unless it's the first leaf in the tree). |
192 | | |
193 | | - pointers to lower nodes or leaves are stored in "branch" pointers. Only |
194 | | the root node may have a NULL in either branch, it is not possible for |
195 | | other branches. Since the nodes are attached to the left branch of the |
196 | | root, it is not possible to see a NULL left branch when walking up a |
197 | | tree. Thus, an empty tree is immediately identified by a NULL left |
198 | | branch at the root. Conversely, the one and only way to identify the |
199 | | root node is to check that it right branch is NULL. Note that the |
200 | | NULL pointer may have a few low-order bits set. |
201 | | |
202 | | - a node connected to its own leaf will have branch[0|1] pointing to |
203 | | itself, and leaf_p pointing to itself. |
204 | | |
205 | | - a node can never have node_p pointing to itself. |
206 | | |
207 | | - a node is linked in a tree if and only if it has a non-null leaf_p. |
208 | | |
209 | | - a node can never have both branches equal, except for the root which can |
210 | | have them both NULL. |
211 | | |
212 | | - deletion only applies to leaves. When a leaf is deleted, its parent must |
213 | | be released too (unless it's the root), and its sibling must attach to |
214 | | the grand-parent, replacing the parent. Also, when a leaf is deleted, |
215 | | the node tied to this leaf will be removed and must be released too. If |
216 | | this node is different from the leaf's parent, the freshly released |
217 | | leaf's parent will be used to replace the node which must go. A released |
218 | | node will never be used anymore, so there's no point in tracking it. |
219 | | |
220 | | - the bit index in a node indicates the bit position in the key which is |
221 | | represented by the branches. That means that a node with (bit == 0) is |
222 | | just above two leaves. Negative bit values are used to build a duplicate |
223 | | tree. The first node above two identical leaves gets (bit == -1). This |
224 | | value logarithmically decreases as the duplicate tree grows. During |
225 | | duplicate insertion, a node is inserted above the highest bit value (the |
226 | | lowest absolute value) in the tree during the right-sided walk. If bit |
227 | | -1 is not encountered (highest < -1), we insert above last leaf. |
228 | | Otherwise, we insert above the node with the highest value which was not |
229 | | equal to the one of its parent + 1. |
230 | | |
231 | | - the "eb_next" primitive walks from left to right, which means from lower |
232 | | to higher keys. It returns duplicates in the order they were inserted. |
233 | | The "eb_first" primitive returns the left-most entry. |
234 | | |
235 | | - the "eb_prev" primitive walks from right to left, which means from |
236 | | higher to lower keys. It returns duplicates in the opposite order they |
237 | | were inserted. The "eb_last" primitive returns the right-most entry. |
238 | | |
239 | | - a tree which has 1 in the lower bit of its root's right branch is a |
240 | | tree with unique nodes. This means that when a node is inserted with |
241 | | a key which already exists will not be inserted, and the previous |
242 | | entry will be returned. |
243 | | |
244 | | */ |
245 | | |
246 | | #ifndef _EBTREE_H |
247 | | #define _EBTREE_H |
248 | | |
249 | | #include <stdlib.h> |
250 | | #include <import/ebtree-t.h> |
251 | | #include <haproxy/api.h> |
252 | | |
253 | | /* returns clz from 7 to 0 for 0x01 to 0xFF. Returns 7 for 0 as well. */ |
254 | | static inline unsigned int clz8(unsigned char c) |
255 | 0 | { |
256 | 0 | unsigned int r = 4; |
257 | 0 |
|
258 | 0 | if (c & 0xf0) { |
259 | 0 | r = 0; |
260 | 0 | c >>= 4; |
261 | 0 | } |
262 | 0 | return r + ((0x000055afU >> (c * 2)) & 0x3); |
263 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:clz8 Unexecuted instantiation: fuzz_cfg_parser.c:clz8 Unexecuted instantiation: cfgparse.c:clz8 Unexecuted instantiation: chunk.c:clz8 Unexecuted instantiation: cli.c:clz8 Unexecuted instantiation: clock.c:clz8 Unexecuted instantiation: connection.c:clz8 Unexecuted instantiation: debug.c:clz8 Unexecuted instantiation: dynbuf.c:clz8 Unexecuted instantiation: eb32tree.c:clz8 Unexecuted instantiation: ebtree.c:clz8 Unexecuted instantiation: errors.c:clz8 Unexecuted instantiation: fd.c:clz8 Unexecuted instantiation: filters.c:clz8 Unexecuted instantiation: flt_http_comp.c:clz8 Unexecuted instantiation: freq_ctr.c:clz8 Unexecuted instantiation: frontend.c:clz8 Unexecuted instantiation: haproxy.c:clz8 Unexecuted instantiation: http.c:clz8 Unexecuted instantiation: http_ana.c:clz8 Unexecuted instantiation: http_ext.c:clz8 Unexecuted instantiation: http_htx.c:clz8 Unexecuted instantiation: http_rules.c:clz8 Unexecuted instantiation: lb_chash.c:clz8 Unexecuted instantiation: lb_fas.c:clz8 Unexecuted instantiation: lb_fwlc.c:clz8 Unexecuted instantiation: lb_fwrr.c:clz8 Unexecuted instantiation: lb_map.c:clz8 Unexecuted instantiation: lb_ss.c:clz8 Unexecuted instantiation: limits.c:clz8 Unexecuted instantiation: listener.c:clz8 Unexecuted instantiation: log.c:clz8 Unexecuted instantiation: mailers.c:clz8 Unexecuted instantiation: mworker.c:clz8 Unexecuted instantiation: peers.c:clz8 Unexecuted instantiation: pool.c:clz8 Unexecuted instantiation: proto_rhttp.c:clz8 Unexecuted instantiation: proto_sockpair.c:clz8 Unexecuted instantiation: protocol.c:clz8 Unexecuted instantiation: proxy.c:clz8 Unexecuted instantiation: queue.c:clz8 Unexecuted instantiation: regex.c:clz8 Unexecuted instantiation: resolvers.c:clz8 Unexecuted instantiation: ring.c:clz8 Unexecuted instantiation: sample.c:clz8 Unexecuted instantiation: server.c:clz8 Unexecuted instantiation: session.c:clz8 Unexecuted instantiation: signal.c:clz8 Unexecuted instantiation: sink.c:clz8 Unexecuted instantiation: sock.c:clz8 Unexecuted instantiation: sock_inet.c:clz8 Unexecuted instantiation: stats-html.c:clz8 Unexecuted instantiation: stats.c:clz8 Unexecuted instantiation: stconn.c:clz8 Unexecuted instantiation: stick_table.c:clz8 Unexecuted instantiation: stream.c:clz8 Unexecuted instantiation: systemd.c:clz8 Unexecuted instantiation: task.c:clz8 Unexecuted instantiation: tcp_rules.c:clz8 Unexecuted instantiation: tcpcheck.c:clz8 Unexecuted instantiation: thread.c:clz8 Unexecuted instantiation: tools.c:clz8 Unexecuted instantiation: trace.c:clz8 Unexecuted instantiation: uri_auth.c:clz8 Unexecuted instantiation: vars.c:clz8 Unexecuted instantiation: acl.c:clz8 Unexecuted instantiation: action.c:clz8 Unexecuted instantiation: activity.c:clz8 Unexecuted instantiation: applet.c:clz8 Unexecuted instantiation: arg.c:clz8 Unexecuted instantiation: backend.c:clz8 Unexecuted instantiation: cache.c:clz8 Unexecuted instantiation: cebu64_tree.c:clz8 Unexecuted instantiation: cebus_tree.c:clz8 Unexecuted instantiation: cfgcond.c:clz8 Unexecuted instantiation: cfgparse-global.c:clz8 Unexecuted instantiation: cfgparse-listen.c:clz8 Unexecuted instantiation: channel.c:clz8 Unexecuted instantiation: check.c:clz8 Unexecuted instantiation: compression.c:clz8 Unexecuted instantiation: dgram.c:clz8 Unexecuted instantiation: dict.c:clz8 Unexecuted instantiation: dns.c:clz8 Unexecuted instantiation: dns_ring.c:clz8 Unexecuted instantiation: eb64tree.c:clz8 Unexecuted instantiation: ebimtree.c:clz8 Unexecuted instantiation: ebistree.c:clz8 Unexecuted instantiation: ebmbtree.c:clz8 Unexecuted instantiation: ebsttree.c:clz8 Unexecuted instantiation: event_hdl.c:clz8 Unexecuted instantiation: extcheck.c:clz8 Unexecuted instantiation: fcgi-app.c:clz8 Unexecuted instantiation: fix.c:clz8 Unexecuted instantiation: guid.c:clz8 Unexecuted instantiation: h1.c:clz8 Unexecuted instantiation: http_fetch.c:clz8 Unexecuted instantiation: mqtt.c:clz8 Unexecuted instantiation: mux_spop.c:clz8 Unexecuted instantiation: pattern.c:clz8 Unexecuted instantiation: payload.c:clz8 Unexecuted instantiation: proto_tcp.c:clz8 Unexecuted instantiation: shctx.c:clz8 Unexecuted instantiation: stats-file.c:clz8 Unexecuted instantiation: stats-json.c:clz8 Unexecuted instantiation: stats-proxy.c:clz8 Unexecuted instantiation: flt_spoe.c:clz8 Unexecuted instantiation: h1_htx.c:clz8 Unexecuted instantiation: lru.c:clz8 |
264 | | |
265 | | /* FLSNZ: find last set bit for non-zero value. "Last" here means the highest |
266 | | * one. It returns a value from 1 to 32 for 1<<0 to 1<<31. |
267 | | */ |
268 | | |
269 | | #if (defined(__i386__) || defined(__x86_64__)) && !defined(__atom__) |
270 | | /* DO NOT USE ON ATOM! The instruction is emulated and is several times slower |
271 | | * than doing the math by hand. |
272 | | */ |
273 | | static inline unsigned int flsnz32(unsigned int x) |
274 | 0 | { |
275 | 0 | unsigned int r; |
276 | 0 | __asm__("bsrl %1,%0\n" |
277 | 0 | : "=r" (r) : "rm" (x)); |
278 | 0 | return r + 1; |
279 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:flsnz32 Unexecuted instantiation: fuzz_cfg_parser.c:flsnz32 Unexecuted instantiation: cfgparse.c:flsnz32 Unexecuted instantiation: chunk.c:flsnz32 Unexecuted instantiation: cli.c:flsnz32 Unexecuted instantiation: clock.c:flsnz32 Unexecuted instantiation: connection.c:flsnz32 Unexecuted instantiation: debug.c:flsnz32 Unexecuted instantiation: dynbuf.c:flsnz32 Unexecuted instantiation: eb32tree.c:flsnz32 Unexecuted instantiation: ebtree.c:flsnz32 Unexecuted instantiation: errors.c:flsnz32 Unexecuted instantiation: fd.c:flsnz32 Unexecuted instantiation: filters.c:flsnz32 Unexecuted instantiation: flt_http_comp.c:flsnz32 Unexecuted instantiation: freq_ctr.c:flsnz32 Unexecuted instantiation: frontend.c:flsnz32 Unexecuted instantiation: haproxy.c:flsnz32 Unexecuted instantiation: http.c:flsnz32 Unexecuted instantiation: http_ana.c:flsnz32 Unexecuted instantiation: http_ext.c:flsnz32 Unexecuted instantiation: http_htx.c:flsnz32 Unexecuted instantiation: http_rules.c:flsnz32 Unexecuted instantiation: lb_chash.c:flsnz32 Unexecuted instantiation: lb_fas.c:flsnz32 Unexecuted instantiation: lb_fwlc.c:flsnz32 Unexecuted instantiation: lb_fwrr.c:flsnz32 Unexecuted instantiation: lb_map.c:flsnz32 Unexecuted instantiation: lb_ss.c:flsnz32 Unexecuted instantiation: limits.c:flsnz32 Unexecuted instantiation: listener.c:flsnz32 Unexecuted instantiation: log.c:flsnz32 Unexecuted instantiation: mailers.c:flsnz32 Unexecuted instantiation: mworker.c:flsnz32 Unexecuted instantiation: peers.c:flsnz32 Unexecuted instantiation: pool.c:flsnz32 Unexecuted instantiation: proto_rhttp.c:flsnz32 Unexecuted instantiation: proto_sockpair.c:flsnz32 Unexecuted instantiation: protocol.c:flsnz32 Unexecuted instantiation: proxy.c:flsnz32 Unexecuted instantiation: queue.c:flsnz32 Unexecuted instantiation: regex.c:flsnz32 Unexecuted instantiation: resolvers.c:flsnz32 Unexecuted instantiation: ring.c:flsnz32 Unexecuted instantiation: sample.c:flsnz32 Unexecuted instantiation: server.c:flsnz32 Unexecuted instantiation: session.c:flsnz32 Unexecuted instantiation: signal.c:flsnz32 Unexecuted instantiation: sink.c:flsnz32 Unexecuted instantiation: sock.c:flsnz32 Unexecuted instantiation: sock_inet.c:flsnz32 Unexecuted instantiation: stats-html.c:flsnz32 Unexecuted instantiation: stats.c:flsnz32 Unexecuted instantiation: stconn.c:flsnz32 Unexecuted instantiation: stick_table.c:flsnz32 Unexecuted instantiation: stream.c:flsnz32 Unexecuted instantiation: systemd.c:flsnz32 Unexecuted instantiation: task.c:flsnz32 Unexecuted instantiation: tcp_rules.c:flsnz32 Unexecuted instantiation: tcpcheck.c:flsnz32 Unexecuted instantiation: thread.c:flsnz32 Unexecuted instantiation: tools.c:flsnz32 Unexecuted instantiation: trace.c:flsnz32 Unexecuted instantiation: uri_auth.c:flsnz32 Unexecuted instantiation: vars.c:flsnz32 Unexecuted instantiation: acl.c:flsnz32 Unexecuted instantiation: action.c:flsnz32 Unexecuted instantiation: activity.c:flsnz32 Unexecuted instantiation: applet.c:flsnz32 Unexecuted instantiation: arg.c:flsnz32 Unexecuted instantiation: backend.c:flsnz32 Unexecuted instantiation: cache.c:flsnz32 Unexecuted instantiation: cebu64_tree.c:flsnz32 Unexecuted instantiation: cebus_tree.c:flsnz32 Unexecuted instantiation: cfgcond.c:flsnz32 Unexecuted instantiation: cfgparse-global.c:flsnz32 Unexecuted instantiation: cfgparse-listen.c:flsnz32 Unexecuted instantiation: channel.c:flsnz32 Unexecuted instantiation: check.c:flsnz32 Unexecuted instantiation: compression.c:flsnz32 Unexecuted instantiation: dgram.c:flsnz32 Unexecuted instantiation: dict.c:flsnz32 Unexecuted instantiation: dns.c:flsnz32 Unexecuted instantiation: dns_ring.c:flsnz32 Unexecuted instantiation: eb64tree.c:flsnz32 Unexecuted instantiation: ebimtree.c:flsnz32 Unexecuted instantiation: ebistree.c:flsnz32 Unexecuted instantiation: ebmbtree.c:flsnz32 Unexecuted instantiation: ebsttree.c:flsnz32 Unexecuted instantiation: event_hdl.c:flsnz32 Unexecuted instantiation: extcheck.c:flsnz32 Unexecuted instantiation: fcgi-app.c:flsnz32 Unexecuted instantiation: fix.c:flsnz32 Unexecuted instantiation: guid.c:flsnz32 Unexecuted instantiation: h1.c:flsnz32 Unexecuted instantiation: http_fetch.c:flsnz32 Unexecuted instantiation: mqtt.c:flsnz32 Unexecuted instantiation: mux_spop.c:flsnz32 Unexecuted instantiation: pattern.c:flsnz32 Unexecuted instantiation: payload.c:flsnz32 Unexecuted instantiation: proto_tcp.c:flsnz32 Unexecuted instantiation: shctx.c:flsnz32 Unexecuted instantiation: stats-file.c:flsnz32 Unexecuted instantiation: stats-json.c:flsnz32 Unexecuted instantiation: stats-proxy.c:flsnz32 Unexecuted instantiation: flt_spoe.c:flsnz32 Unexecuted instantiation: h1_htx.c:flsnz32 Unexecuted instantiation: lru.c:flsnz32 |
280 | 0 | #define flsnz32(x) flsnz32(x) |
281 | | |
282 | | # if defined(__x86_64__) |
283 | | static inline unsigned int flsnz64(unsigned long long x) |
284 | 0 | { |
285 | 0 | unsigned long long r; |
286 | 0 | __asm__("bsrq %1,%0\n" |
287 | 0 | : "=r" (r) : "rm" (x)); |
288 | 0 | return r + 1; |
289 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:flsnz64 Unexecuted instantiation: fuzz_cfg_parser.c:flsnz64 Unexecuted instantiation: cfgparse.c:flsnz64 Unexecuted instantiation: chunk.c:flsnz64 Unexecuted instantiation: cli.c:flsnz64 Unexecuted instantiation: clock.c:flsnz64 Unexecuted instantiation: connection.c:flsnz64 Unexecuted instantiation: debug.c:flsnz64 Unexecuted instantiation: dynbuf.c:flsnz64 Unexecuted instantiation: eb32tree.c:flsnz64 Unexecuted instantiation: ebtree.c:flsnz64 Unexecuted instantiation: errors.c:flsnz64 Unexecuted instantiation: fd.c:flsnz64 Unexecuted instantiation: filters.c:flsnz64 Unexecuted instantiation: flt_http_comp.c:flsnz64 Unexecuted instantiation: freq_ctr.c:flsnz64 Unexecuted instantiation: frontend.c:flsnz64 Unexecuted instantiation: haproxy.c:flsnz64 Unexecuted instantiation: http.c:flsnz64 Unexecuted instantiation: http_ana.c:flsnz64 Unexecuted instantiation: http_ext.c:flsnz64 Unexecuted instantiation: http_htx.c:flsnz64 Unexecuted instantiation: http_rules.c:flsnz64 Unexecuted instantiation: lb_chash.c:flsnz64 Unexecuted instantiation: lb_fas.c:flsnz64 Unexecuted instantiation: lb_fwlc.c:flsnz64 Unexecuted instantiation: lb_fwrr.c:flsnz64 Unexecuted instantiation: lb_map.c:flsnz64 Unexecuted instantiation: lb_ss.c:flsnz64 Unexecuted instantiation: limits.c:flsnz64 Unexecuted instantiation: listener.c:flsnz64 Unexecuted instantiation: log.c:flsnz64 Unexecuted instantiation: mailers.c:flsnz64 Unexecuted instantiation: mworker.c:flsnz64 Unexecuted instantiation: peers.c:flsnz64 Unexecuted instantiation: pool.c:flsnz64 Unexecuted instantiation: proto_rhttp.c:flsnz64 Unexecuted instantiation: proto_sockpair.c:flsnz64 Unexecuted instantiation: protocol.c:flsnz64 Unexecuted instantiation: proxy.c:flsnz64 Unexecuted instantiation: queue.c:flsnz64 Unexecuted instantiation: regex.c:flsnz64 Unexecuted instantiation: resolvers.c:flsnz64 Unexecuted instantiation: ring.c:flsnz64 Unexecuted instantiation: sample.c:flsnz64 Unexecuted instantiation: server.c:flsnz64 Unexecuted instantiation: session.c:flsnz64 Unexecuted instantiation: signal.c:flsnz64 Unexecuted instantiation: sink.c:flsnz64 Unexecuted instantiation: sock.c:flsnz64 Unexecuted instantiation: sock_inet.c:flsnz64 Unexecuted instantiation: stats-html.c:flsnz64 Unexecuted instantiation: stats.c:flsnz64 Unexecuted instantiation: stconn.c:flsnz64 Unexecuted instantiation: stick_table.c:flsnz64 Unexecuted instantiation: stream.c:flsnz64 Unexecuted instantiation: systemd.c:flsnz64 Unexecuted instantiation: task.c:flsnz64 Unexecuted instantiation: tcp_rules.c:flsnz64 Unexecuted instantiation: tcpcheck.c:flsnz64 Unexecuted instantiation: thread.c:flsnz64 Unexecuted instantiation: tools.c:flsnz64 Unexecuted instantiation: trace.c:flsnz64 Unexecuted instantiation: uri_auth.c:flsnz64 Unexecuted instantiation: vars.c:flsnz64 Unexecuted instantiation: acl.c:flsnz64 Unexecuted instantiation: action.c:flsnz64 Unexecuted instantiation: activity.c:flsnz64 Unexecuted instantiation: applet.c:flsnz64 Unexecuted instantiation: arg.c:flsnz64 Unexecuted instantiation: backend.c:flsnz64 Unexecuted instantiation: cache.c:flsnz64 Unexecuted instantiation: cebu64_tree.c:flsnz64 Unexecuted instantiation: cebus_tree.c:flsnz64 Unexecuted instantiation: cfgcond.c:flsnz64 Unexecuted instantiation: cfgparse-global.c:flsnz64 Unexecuted instantiation: cfgparse-listen.c:flsnz64 Unexecuted instantiation: channel.c:flsnz64 Unexecuted instantiation: check.c:flsnz64 Unexecuted instantiation: compression.c:flsnz64 Unexecuted instantiation: dgram.c:flsnz64 Unexecuted instantiation: dict.c:flsnz64 Unexecuted instantiation: dns.c:flsnz64 Unexecuted instantiation: dns_ring.c:flsnz64 Unexecuted instantiation: eb64tree.c:flsnz64 Unexecuted instantiation: ebimtree.c:flsnz64 Unexecuted instantiation: ebistree.c:flsnz64 Unexecuted instantiation: ebmbtree.c:flsnz64 Unexecuted instantiation: ebsttree.c:flsnz64 Unexecuted instantiation: event_hdl.c:flsnz64 Unexecuted instantiation: extcheck.c:flsnz64 Unexecuted instantiation: fcgi-app.c:flsnz64 Unexecuted instantiation: fix.c:flsnz64 Unexecuted instantiation: guid.c:flsnz64 Unexecuted instantiation: h1.c:flsnz64 Unexecuted instantiation: http_fetch.c:flsnz64 Unexecuted instantiation: mqtt.c:flsnz64 Unexecuted instantiation: mux_spop.c:flsnz64 Unexecuted instantiation: pattern.c:flsnz64 Unexecuted instantiation: payload.c:flsnz64 Unexecuted instantiation: proto_tcp.c:flsnz64 Unexecuted instantiation: shctx.c:flsnz64 Unexecuted instantiation: stats-file.c:flsnz64 Unexecuted instantiation: stats-json.c:flsnz64 Unexecuted instantiation: stats-proxy.c:flsnz64 Unexecuted instantiation: flt_spoe.c:flsnz64 Unexecuted instantiation: h1_htx.c:flsnz64 Unexecuted instantiation: lru.c:flsnz64 |
290 | 0 | # define flsnz64(x) flsnz64(x) |
291 | | # endif |
292 | | |
293 | | #elif !defined(__atom__) && defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2))) |
294 | | /* gcc >= 4.2 brings __builtin_clz() and __builtin_clzl(), usable for non-x86 */ |
295 | | |
296 | | static inline unsigned int flsnz32(unsigned int x) |
297 | | { |
298 | | return 32 - __builtin_clz(x); |
299 | | } |
300 | | # define flsnz32(x) flsnz32(x) |
301 | | |
302 | | # if defined(__SIZEOF_LONG__) && (__SIZEOF_LONG__ > 4) |
303 | | static inline unsigned int flsnz64(unsigned long x) |
304 | | { |
305 | | return (__SIZEOF_LONG__ * 8) - __builtin_clzl(x); |
306 | | } |
307 | | # define flsnz64(x) flsnz64(x) |
308 | | # endif |
309 | | |
310 | | #endif /* end of arch-specific implementations */ |
311 | | |
312 | | /*** Fallback versions below ***/ |
313 | | |
314 | | #ifndef flsnz8 |
315 | | # if defined(flsnz32) |
316 | 0 | # define flsnz8(x) flsnz32((unsigned char)x) |
317 | | # else |
318 | | static inline unsigned int flsnz8(unsigned int x) |
319 | | { |
320 | | unsigned int ret = 0; |
321 | | if (x >> 4) { x >>= 4; ret += 4; } |
322 | | return ret + ((0xFFFFAA50U >> (x << 1)) & 3) + 1; |
323 | | } |
324 | | # define flsnz8(x) flsnz8(x) |
325 | | # endif |
326 | | #endif |
327 | | |
328 | | #ifndef flsnz32 |
329 | | # define flsnz32(___a) ({ \ |
330 | | register unsigned int ___x, ___bits = 0; \ |
331 | | ___x = (___a); \ |
332 | | if (___x & 0xffff0000) { ___x &= 0xffff0000; ___bits += 16;} \ |
333 | | if (___x & 0xff00ff00) { ___x &= 0xff00ff00; ___bits += 8;} \ |
334 | | if (___x & 0xf0f0f0f0) { ___x &= 0xf0f0f0f0; ___bits += 4;} \ |
335 | | if (___x & 0xcccccccc) { ___x &= 0xcccccccc; ___bits += 2;} \ |
336 | | if (___x & 0xaaaaaaaa) { ___x &= 0xaaaaaaaa; ___bits += 1;} \ |
337 | | ___bits + 1; \ |
338 | | }) |
339 | | #endif |
340 | | |
341 | | #ifndef flsnz64 |
342 | | static inline unsigned int flsnz64(unsigned long long x) |
343 | | { |
344 | | unsigned int h; |
345 | | unsigned int bits = 32; |
346 | | |
347 | | h = x >> 32; |
348 | | if (!h) { |
349 | | h = x; |
350 | | bits = 0; |
351 | | } |
352 | | return flsnz32(h) + bits; |
353 | | } |
354 | | # define flsnz64(x) flsnz64(x) |
355 | | #endif |
356 | | |
357 | | #ifndef flsnz_long |
358 | 0 | # define flsnz_long(x) ((sizeof(long) > 4) ? flsnz64(x) : flsnz32(x)) |
359 | | #endif |
360 | | |
361 | | #ifndef flsnz |
362 | 0 | # define flsnz(x) ((sizeof(x) > 4) ? flsnz64(x) : (sizeof(x) > 1) ? flsnz32(x) : flsnz8(x)) |
363 | | #endif |
364 | | |
365 | 0 | #define fls64(x) flsnz64(x) |
366 | | #define fls_auto(x) ((x) ? flsnz(x) : 0) |
367 | | |
368 | | /* Linux-like "container_of". It returns a pointer to the structure of type |
369 | | * <type> which has its member <name> stored at address <ptr>. |
370 | | */ |
371 | | #ifndef container_of |
372 | | #define container_of(ptr, type, name) ((type *)(((void *)(ptr)) - ((long)&((type *)0)->name))) |
373 | | #endif |
374 | | |
375 | | /* returns a pointer to the structure of type <type> which has its member <name> |
376 | | * stored at address <ptr>, unless <ptr> is 0, in which case 0 is returned. |
377 | | */ |
378 | | #ifndef container_of_safe |
379 | | #define container_of_safe(ptr, type, name) \ |
380 | | ({ void *__p = (ptr); \ |
381 | | __p ? (type *)(__p - ((long)&((type *)0)->name)) : (type *)0; \ |
382 | | }) |
383 | | #endif |
384 | | |
385 | | /* Return the structure of type <type> whose member <member> points to <ptr> */ |
386 | | #define eb_entry(ptr, type, member) container_of(ptr, type, member) |
387 | | |
388 | | /***************************************\ |
389 | | * Private functions. Not for end-user * |
390 | | \***************************************/ |
391 | | |
392 | | /* Converts a root pointer to its equivalent eb_troot_t pointer, |
393 | | * ready to be stored in ->branch[], leaf_p or node_p. NULL is not |
394 | | * conserved. To be used with EB_LEAF, EB_NODE, EB_LEFT or EB_RGHT in <tag>. |
395 | | */ |
396 | | static inline eb_troot_t *eb_dotag(const struct eb_root *root, const int tag) |
397 | 0 | { |
398 | 0 | return (eb_troot_t *)((void *)root + tag); |
399 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_dotag Unexecuted instantiation: fuzz_cfg_parser.c:eb_dotag Unexecuted instantiation: cfgparse.c:eb_dotag Unexecuted instantiation: chunk.c:eb_dotag Unexecuted instantiation: cli.c:eb_dotag Unexecuted instantiation: clock.c:eb_dotag Unexecuted instantiation: connection.c:eb_dotag Unexecuted instantiation: debug.c:eb_dotag Unexecuted instantiation: dynbuf.c:eb_dotag Unexecuted instantiation: eb32tree.c:eb_dotag Unexecuted instantiation: ebtree.c:eb_dotag Unexecuted instantiation: errors.c:eb_dotag Unexecuted instantiation: fd.c:eb_dotag Unexecuted instantiation: filters.c:eb_dotag Unexecuted instantiation: flt_http_comp.c:eb_dotag Unexecuted instantiation: freq_ctr.c:eb_dotag Unexecuted instantiation: frontend.c:eb_dotag Unexecuted instantiation: haproxy.c:eb_dotag Unexecuted instantiation: http.c:eb_dotag Unexecuted instantiation: http_ana.c:eb_dotag Unexecuted instantiation: http_ext.c:eb_dotag Unexecuted instantiation: http_htx.c:eb_dotag Unexecuted instantiation: http_rules.c:eb_dotag Unexecuted instantiation: lb_chash.c:eb_dotag Unexecuted instantiation: lb_fas.c:eb_dotag Unexecuted instantiation: lb_fwlc.c:eb_dotag Unexecuted instantiation: lb_fwrr.c:eb_dotag Unexecuted instantiation: lb_map.c:eb_dotag Unexecuted instantiation: lb_ss.c:eb_dotag Unexecuted instantiation: limits.c:eb_dotag Unexecuted instantiation: listener.c:eb_dotag Unexecuted instantiation: log.c:eb_dotag Unexecuted instantiation: mailers.c:eb_dotag Unexecuted instantiation: mworker.c:eb_dotag Unexecuted instantiation: peers.c:eb_dotag Unexecuted instantiation: pool.c:eb_dotag Unexecuted instantiation: proto_rhttp.c:eb_dotag Unexecuted instantiation: proto_sockpair.c:eb_dotag Unexecuted instantiation: protocol.c:eb_dotag Unexecuted instantiation: proxy.c:eb_dotag Unexecuted instantiation: queue.c:eb_dotag Unexecuted instantiation: regex.c:eb_dotag Unexecuted instantiation: resolvers.c:eb_dotag Unexecuted instantiation: ring.c:eb_dotag Unexecuted instantiation: sample.c:eb_dotag Unexecuted instantiation: server.c:eb_dotag Unexecuted instantiation: session.c:eb_dotag Unexecuted instantiation: signal.c:eb_dotag Unexecuted instantiation: sink.c:eb_dotag Unexecuted instantiation: sock.c:eb_dotag Unexecuted instantiation: sock_inet.c:eb_dotag Unexecuted instantiation: stats-html.c:eb_dotag Unexecuted instantiation: stats.c:eb_dotag Unexecuted instantiation: stconn.c:eb_dotag Unexecuted instantiation: stick_table.c:eb_dotag Unexecuted instantiation: stream.c:eb_dotag Unexecuted instantiation: systemd.c:eb_dotag Unexecuted instantiation: task.c:eb_dotag Unexecuted instantiation: tcp_rules.c:eb_dotag Unexecuted instantiation: tcpcheck.c:eb_dotag Unexecuted instantiation: thread.c:eb_dotag Unexecuted instantiation: tools.c:eb_dotag Unexecuted instantiation: trace.c:eb_dotag Unexecuted instantiation: uri_auth.c:eb_dotag Unexecuted instantiation: vars.c:eb_dotag Unexecuted instantiation: acl.c:eb_dotag Unexecuted instantiation: action.c:eb_dotag Unexecuted instantiation: activity.c:eb_dotag Unexecuted instantiation: applet.c:eb_dotag Unexecuted instantiation: arg.c:eb_dotag Unexecuted instantiation: backend.c:eb_dotag Unexecuted instantiation: cache.c:eb_dotag Unexecuted instantiation: cebu64_tree.c:eb_dotag Unexecuted instantiation: cebus_tree.c:eb_dotag Unexecuted instantiation: cfgcond.c:eb_dotag Unexecuted instantiation: cfgparse-global.c:eb_dotag Unexecuted instantiation: cfgparse-listen.c:eb_dotag Unexecuted instantiation: channel.c:eb_dotag Unexecuted instantiation: check.c:eb_dotag Unexecuted instantiation: compression.c:eb_dotag Unexecuted instantiation: dgram.c:eb_dotag Unexecuted instantiation: dict.c:eb_dotag Unexecuted instantiation: dns.c:eb_dotag Unexecuted instantiation: dns_ring.c:eb_dotag Unexecuted instantiation: eb64tree.c:eb_dotag Unexecuted instantiation: ebimtree.c:eb_dotag Unexecuted instantiation: ebistree.c:eb_dotag Unexecuted instantiation: ebmbtree.c:eb_dotag Unexecuted instantiation: ebsttree.c:eb_dotag Unexecuted instantiation: event_hdl.c:eb_dotag Unexecuted instantiation: extcheck.c:eb_dotag Unexecuted instantiation: fcgi-app.c:eb_dotag Unexecuted instantiation: fix.c:eb_dotag Unexecuted instantiation: guid.c:eb_dotag Unexecuted instantiation: h1.c:eb_dotag Unexecuted instantiation: http_fetch.c:eb_dotag Unexecuted instantiation: mqtt.c:eb_dotag Unexecuted instantiation: mux_spop.c:eb_dotag Unexecuted instantiation: pattern.c:eb_dotag Unexecuted instantiation: payload.c:eb_dotag Unexecuted instantiation: proto_tcp.c:eb_dotag Unexecuted instantiation: shctx.c:eb_dotag Unexecuted instantiation: stats-file.c:eb_dotag Unexecuted instantiation: stats-json.c:eb_dotag Unexecuted instantiation: stats-proxy.c:eb_dotag Unexecuted instantiation: flt_spoe.c:eb_dotag Unexecuted instantiation: h1_htx.c:eb_dotag Unexecuted instantiation: lru.c:eb_dotag |
400 | | |
401 | | /* Converts an eb_troot_t pointer pointer to its equivalent eb_root pointer, |
402 | | * for use with pointers from ->branch[], leaf_p or node_p. NULL is conserved |
403 | | * as long as the tree is not corrupted. To be used with EB_LEAF, EB_NODE, |
404 | | * EB_LEFT or EB_RGHT in <tag>. |
405 | | */ |
406 | | static inline struct eb_root *eb_untag(const eb_troot_t *troot, const int tag) |
407 | 0 | { |
408 | 0 | return (struct eb_root *)((void *)troot - tag); |
409 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_untag Unexecuted instantiation: fuzz_cfg_parser.c:eb_untag Unexecuted instantiation: cfgparse.c:eb_untag Unexecuted instantiation: chunk.c:eb_untag Unexecuted instantiation: cli.c:eb_untag Unexecuted instantiation: clock.c:eb_untag Unexecuted instantiation: connection.c:eb_untag Unexecuted instantiation: debug.c:eb_untag Unexecuted instantiation: dynbuf.c:eb_untag Unexecuted instantiation: eb32tree.c:eb_untag Unexecuted instantiation: ebtree.c:eb_untag Unexecuted instantiation: errors.c:eb_untag Unexecuted instantiation: fd.c:eb_untag Unexecuted instantiation: filters.c:eb_untag Unexecuted instantiation: flt_http_comp.c:eb_untag Unexecuted instantiation: freq_ctr.c:eb_untag Unexecuted instantiation: frontend.c:eb_untag Unexecuted instantiation: haproxy.c:eb_untag Unexecuted instantiation: http.c:eb_untag Unexecuted instantiation: http_ana.c:eb_untag Unexecuted instantiation: http_ext.c:eb_untag Unexecuted instantiation: http_htx.c:eb_untag Unexecuted instantiation: http_rules.c:eb_untag Unexecuted instantiation: lb_chash.c:eb_untag Unexecuted instantiation: lb_fas.c:eb_untag Unexecuted instantiation: lb_fwlc.c:eb_untag Unexecuted instantiation: lb_fwrr.c:eb_untag Unexecuted instantiation: lb_map.c:eb_untag Unexecuted instantiation: lb_ss.c:eb_untag Unexecuted instantiation: limits.c:eb_untag Unexecuted instantiation: listener.c:eb_untag Unexecuted instantiation: log.c:eb_untag Unexecuted instantiation: mailers.c:eb_untag Unexecuted instantiation: mworker.c:eb_untag Unexecuted instantiation: peers.c:eb_untag Unexecuted instantiation: pool.c:eb_untag Unexecuted instantiation: proto_rhttp.c:eb_untag Unexecuted instantiation: proto_sockpair.c:eb_untag Unexecuted instantiation: protocol.c:eb_untag Unexecuted instantiation: proxy.c:eb_untag Unexecuted instantiation: queue.c:eb_untag Unexecuted instantiation: regex.c:eb_untag Unexecuted instantiation: resolvers.c:eb_untag Unexecuted instantiation: ring.c:eb_untag Unexecuted instantiation: sample.c:eb_untag Unexecuted instantiation: server.c:eb_untag Unexecuted instantiation: session.c:eb_untag Unexecuted instantiation: signal.c:eb_untag Unexecuted instantiation: sink.c:eb_untag Unexecuted instantiation: sock.c:eb_untag Unexecuted instantiation: sock_inet.c:eb_untag Unexecuted instantiation: stats-html.c:eb_untag Unexecuted instantiation: stats.c:eb_untag Unexecuted instantiation: stconn.c:eb_untag Unexecuted instantiation: stick_table.c:eb_untag Unexecuted instantiation: stream.c:eb_untag Unexecuted instantiation: systemd.c:eb_untag Unexecuted instantiation: task.c:eb_untag Unexecuted instantiation: tcp_rules.c:eb_untag Unexecuted instantiation: tcpcheck.c:eb_untag Unexecuted instantiation: thread.c:eb_untag Unexecuted instantiation: tools.c:eb_untag Unexecuted instantiation: trace.c:eb_untag Unexecuted instantiation: uri_auth.c:eb_untag Unexecuted instantiation: vars.c:eb_untag Unexecuted instantiation: acl.c:eb_untag Unexecuted instantiation: action.c:eb_untag Unexecuted instantiation: activity.c:eb_untag Unexecuted instantiation: applet.c:eb_untag Unexecuted instantiation: arg.c:eb_untag Unexecuted instantiation: backend.c:eb_untag Unexecuted instantiation: cache.c:eb_untag Unexecuted instantiation: cebu64_tree.c:eb_untag Unexecuted instantiation: cebus_tree.c:eb_untag Unexecuted instantiation: cfgcond.c:eb_untag Unexecuted instantiation: cfgparse-global.c:eb_untag Unexecuted instantiation: cfgparse-listen.c:eb_untag Unexecuted instantiation: channel.c:eb_untag Unexecuted instantiation: check.c:eb_untag Unexecuted instantiation: compression.c:eb_untag Unexecuted instantiation: dgram.c:eb_untag Unexecuted instantiation: dict.c:eb_untag Unexecuted instantiation: dns.c:eb_untag Unexecuted instantiation: dns_ring.c:eb_untag Unexecuted instantiation: eb64tree.c:eb_untag Unexecuted instantiation: ebimtree.c:eb_untag Unexecuted instantiation: ebistree.c:eb_untag Unexecuted instantiation: ebmbtree.c:eb_untag Unexecuted instantiation: ebsttree.c:eb_untag Unexecuted instantiation: event_hdl.c:eb_untag Unexecuted instantiation: extcheck.c:eb_untag Unexecuted instantiation: fcgi-app.c:eb_untag Unexecuted instantiation: fix.c:eb_untag Unexecuted instantiation: guid.c:eb_untag Unexecuted instantiation: h1.c:eb_untag Unexecuted instantiation: http_fetch.c:eb_untag Unexecuted instantiation: mqtt.c:eb_untag Unexecuted instantiation: mux_spop.c:eb_untag Unexecuted instantiation: pattern.c:eb_untag Unexecuted instantiation: payload.c:eb_untag Unexecuted instantiation: proto_tcp.c:eb_untag Unexecuted instantiation: shctx.c:eb_untag Unexecuted instantiation: stats-file.c:eb_untag Unexecuted instantiation: stats-json.c:eb_untag Unexecuted instantiation: stats-proxy.c:eb_untag Unexecuted instantiation: flt_spoe.c:eb_untag Unexecuted instantiation: h1_htx.c:eb_untag Unexecuted instantiation: lru.c:eb_untag |
410 | | |
411 | | /* returns the tag associated with an eb_troot_t pointer */ |
412 | | static inline int eb_gettag(eb_troot_t *troot) |
413 | 0 | { |
414 | 0 | return (unsigned long)troot & 1; |
415 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_gettag Unexecuted instantiation: fuzz_cfg_parser.c:eb_gettag Unexecuted instantiation: cfgparse.c:eb_gettag Unexecuted instantiation: chunk.c:eb_gettag Unexecuted instantiation: cli.c:eb_gettag Unexecuted instantiation: clock.c:eb_gettag Unexecuted instantiation: connection.c:eb_gettag Unexecuted instantiation: debug.c:eb_gettag Unexecuted instantiation: dynbuf.c:eb_gettag Unexecuted instantiation: eb32tree.c:eb_gettag Unexecuted instantiation: ebtree.c:eb_gettag Unexecuted instantiation: errors.c:eb_gettag Unexecuted instantiation: fd.c:eb_gettag Unexecuted instantiation: filters.c:eb_gettag Unexecuted instantiation: flt_http_comp.c:eb_gettag Unexecuted instantiation: freq_ctr.c:eb_gettag Unexecuted instantiation: frontend.c:eb_gettag Unexecuted instantiation: haproxy.c:eb_gettag Unexecuted instantiation: http.c:eb_gettag Unexecuted instantiation: http_ana.c:eb_gettag Unexecuted instantiation: http_ext.c:eb_gettag Unexecuted instantiation: http_htx.c:eb_gettag Unexecuted instantiation: http_rules.c:eb_gettag Unexecuted instantiation: lb_chash.c:eb_gettag Unexecuted instantiation: lb_fas.c:eb_gettag Unexecuted instantiation: lb_fwlc.c:eb_gettag Unexecuted instantiation: lb_fwrr.c:eb_gettag Unexecuted instantiation: lb_map.c:eb_gettag Unexecuted instantiation: lb_ss.c:eb_gettag Unexecuted instantiation: limits.c:eb_gettag Unexecuted instantiation: listener.c:eb_gettag Unexecuted instantiation: log.c:eb_gettag Unexecuted instantiation: mailers.c:eb_gettag Unexecuted instantiation: mworker.c:eb_gettag Unexecuted instantiation: peers.c:eb_gettag Unexecuted instantiation: pool.c:eb_gettag Unexecuted instantiation: proto_rhttp.c:eb_gettag Unexecuted instantiation: proto_sockpair.c:eb_gettag Unexecuted instantiation: protocol.c:eb_gettag Unexecuted instantiation: proxy.c:eb_gettag Unexecuted instantiation: queue.c:eb_gettag Unexecuted instantiation: regex.c:eb_gettag Unexecuted instantiation: resolvers.c:eb_gettag Unexecuted instantiation: ring.c:eb_gettag Unexecuted instantiation: sample.c:eb_gettag Unexecuted instantiation: server.c:eb_gettag Unexecuted instantiation: session.c:eb_gettag Unexecuted instantiation: signal.c:eb_gettag Unexecuted instantiation: sink.c:eb_gettag Unexecuted instantiation: sock.c:eb_gettag Unexecuted instantiation: sock_inet.c:eb_gettag Unexecuted instantiation: stats-html.c:eb_gettag Unexecuted instantiation: stats.c:eb_gettag Unexecuted instantiation: stconn.c:eb_gettag Unexecuted instantiation: stick_table.c:eb_gettag Unexecuted instantiation: stream.c:eb_gettag Unexecuted instantiation: systemd.c:eb_gettag Unexecuted instantiation: task.c:eb_gettag Unexecuted instantiation: tcp_rules.c:eb_gettag Unexecuted instantiation: tcpcheck.c:eb_gettag Unexecuted instantiation: thread.c:eb_gettag Unexecuted instantiation: tools.c:eb_gettag Unexecuted instantiation: trace.c:eb_gettag Unexecuted instantiation: uri_auth.c:eb_gettag Unexecuted instantiation: vars.c:eb_gettag Unexecuted instantiation: acl.c:eb_gettag Unexecuted instantiation: action.c:eb_gettag Unexecuted instantiation: activity.c:eb_gettag Unexecuted instantiation: applet.c:eb_gettag Unexecuted instantiation: arg.c:eb_gettag Unexecuted instantiation: backend.c:eb_gettag Unexecuted instantiation: cache.c:eb_gettag Unexecuted instantiation: cebu64_tree.c:eb_gettag Unexecuted instantiation: cebus_tree.c:eb_gettag Unexecuted instantiation: cfgcond.c:eb_gettag Unexecuted instantiation: cfgparse-global.c:eb_gettag Unexecuted instantiation: cfgparse-listen.c:eb_gettag Unexecuted instantiation: channel.c:eb_gettag Unexecuted instantiation: check.c:eb_gettag Unexecuted instantiation: compression.c:eb_gettag Unexecuted instantiation: dgram.c:eb_gettag Unexecuted instantiation: dict.c:eb_gettag Unexecuted instantiation: dns.c:eb_gettag Unexecuted instantiation: dns_ring.c:eb_gettag Unexecuted instantiation: eb64tree.c:eb_gettag Unexecuted instantiation: ebimtree.c:eb_gettag Unexecuted instantiation: ebistree.c:eb_gettag Unexecuted instantiation: ebmbtree.c:eb_gettag Unexecuted instantiation: ebsttree.c:eb_gettag Unexecuted instantiation: event_hdl.c:eb_gettag Unexecuted instantiation: extcheck.c:eb_gettag Unexecuted instantiation: fcgi-app.c:eb_gettag Unexecuted instantiation: fix.c:eb_gettag Unexecuted instantiation: guid.c:eb_gettag Unexecuted instantiation: h1.c:eb_gettag Unexecuted instantiation: http_fetch.c:eb_gettag Unexecuted instantiation: mqtt.c:eb_gettag Unexecuted instantiation: mux_spop.c:eb_gettag Unexecuted instantiation: pattern.c:eb_gettag Unexecuted instantiation: payload.c:eb_gettag Unexecuted instantiation: proto_tcp.c:eb_gettag Unexecuted instantiation: shctx.c:eb_gettag Unexecuted instantiation: stats-file.c:eb_gettag Unexecuted instantiation: stats-json.c:eb_gettag Unexecuted instantiation: stats-proxy.c:eb_gettag Unexecuted instantiation: flt_spoe.c:eb_gettag Unexecuted instantiation: h1_htx.c:eb_gettag Unexecuted instantiation: lru.c:eb_gettag |
416 | | |
417 | | /* Converts a root pointer to its equivalent eb_troot_t pointer and clears the |
418 | | * tag, no matter what its value was. |
419 | | */ |
420 | | static inline struct eb_root *eb_clrtag(const eb_troot_t *troot) |
421 | 0 | { |
422 | 0 | return (struct eb_root *)((unsigned long)troot & ~1UL); |
423 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_clrtag Unexecuted instantiation: fuzz_cfg_parser.c:eb_clrtag Unexecuted instantiation: cfgparse.c:eb_clrtag Unexecuted instantiation: chunk.c:eb_clrtag Unexecuted instantiation: cli.c:eb_clrtag Unexecuted instantiation: clock.c:eb_clrtag Unexecuted instantiation: connection.c:eb_clrtag Unexecuted instantiation: debug.c:eb_clrtag Unexecuted instantiation: dynbuf.c:eb_clrtag Unexecuted instantiation: eb32tree.c:eb_clrtag Unexecuted instantiation: ebtree.c:eb_clrtag Unexecuted instantiation: errors.c:eb_clrtag Unexecuted instantiation: fd.c:eb_clrtag Unexecuted instantiation: filters.c:eb_clrtag Unexecuted instantiation: flt_http_comp.c:eb_clrtag Unexecuted instantiation: freq_ctr.c:eb_clrtag Unexecuted instantiation: frontend.c:eb_clrtag Unexecuted instantiation: haproxy.c:eb_clrtag Unexecuted instantiation: http.c:eb_clrtag Unexecuted instantiation: http_ana.c:eb_clrtag Unexecuted instantiation: http_ext.c:eb_clrtag Unexecuted instantiation: http_htx.c:eb_clrtag Unexecuted instantiation: http_rules.c:eb_clrtag Unexecuted instantiation: lb_chash.c:eb_clrtag Unexecuted instantiation: lb_fas.c:eb_clrtag Unexecuted instantiation: lb_fwlc.c:eb_clrtag Unexecuted instantiation: lb_fwrr.c:eb_clrtag Unexecuted instantiation: lb_map.c:eb_clrtag Unexecuted instantiation: lb_ss.c:eb_clrtag Unexecuted instantiation: limits.c:eb_clrtag Unexecuted instantiation: listener.c:eb_clrtag Unexecuted instantiation: log.c:eb_clrtag Unexecuted instantiation: mailers.c:eb_clrtag Unexecuted instantiation: mworker.c:eb_clrtag Unexecuted instantiation: peers.c:eb_clrtag Unexecuted instantiation: pool.c:eb_clrtag Unexecuted instantiation: proto_rhttp.c:eb_clrtag Unexecuted instantiation: proto_sockpair.c:eb_clrtag Unexecuted instantiation: protocol.c:eb_clrtag Unexecuted instantiation: proxy.c:eb_clrtag Unexecuted instantiation: queue.c:eb_clrtag Unexecuted instantiation: regex.c:eb_clrtag Unexecuted instantiation: resolvers.c:eb_clrtag Unexecuted instantiation: ring.c:eb_clrtag Unexecuted instantiation: sample.c:eb_clrtag Unexecuted instantiation: server.c:eb_clrtag Unexecuted instantiation: session.c:eb_clrtag Unexecuted instantiation: signal.c:eb_clrtag Unexecuted instantiation: sink.c:eb_clrtag Unexecuted instantiation: sock.c:eb_clrtag Unexecuted instantiation: sock_inet.c:eb_clrtag Unexecuted instantiation: stats-html.c:eb_clrtag Unexecuted instantiation: stats.c:eb_clrtag Unexecuted instantiation: stconn.c:eb_clrtag Unexecuted instantiation: stick_table.c:eb_clrtag Unexecuted instantiation: stream.c:eb_clrtag Unexecuted instantiation: systemd.c:eb_clrtag Unexecuted instantiation: task.c:eb_clrtag Unexecuted instantiation: tcp_rules.c:eb_clrtag Unexecuted instantiation: tcpcheck.c:eb_clrtag Unexecuted instantiation: thread.c:eb_clrtag Unexecuted instantiation: tools.c:eb_clrtag Unexecuted instantiation: trace.c:eb_clrtag Unexecuted instantiation: uri_auth.c:eb_clrtag Unexecuted instantiation: vars.c:eb_clrtag Unexecuted instantiation: acl.c:eb_clrtag Unexecuted instantiation: action.c:eb_clrtag Unexecuted instantiation: activity.c:eb_clrtag Unexecuted instantiation: applet.c:eb_clrtag Unexecuted instantiation: arg.c:eb_clrtag Unexecuted instantiation: backend.c:eb_clrtag Unexecuted instantiation: cache.c:eb_clrtag Unexecuted instantiation: cebu64_tree.c:eb_clrtag Unexecuted instantiation: cebus_tree.c:eb_clrtag Unexecuted instantiation: cfgcond.c:eb_clrtag Unexecuted instantiation: cfgparse-global.c:eb_clrtag Unexecuted instantiation: cfgparse-listen.c:eb_clrtag Unexecuted instantiation: channel.c:eb_clrtag Unexecuted instantiation: check.c:eb_clrtag Unexecuted instantiation: compression.c:eb_clrtag Unexecuted instantiation: dgram.c:eb_clrtag Unexecuted instantiation: dict.c:eb_clrtag Unexecuted instantiation: dns.c:eb_clrtag Unexecuted instantiation: dns_ring.c:eb_clrtag Unexecuted instantiation: eb64tree.c:eb_clrtag Unexecuted instantiation: ebimtree.c:eb_clrtag Unexecuted instantiation: ebistree.c:eb_clrtag Unexecuted instantiation: ebmbtree.c:eb_clrtag Unexecuted instantiation: ebsttree.c:eb_clrtag Unexecuted instantiation: event_hdl.c:eb_clrtag Unexecuted instantiation: extcheck.c:eb_clrtag Unexecuted instantiation: fcgi-app.c:eb_clrtag Unexecuted instantiation: fix.c:eb_clrtag Unexecuted instantiation: guid.c:eb_clrtag Unexecuted instantiation: h1.c:eb_clrtag Unexecuted instantiation: http_fetch.c:eb_clrtag Unexecuted instantiation: mqtt.c:eb_clrtag Unexecuted instantiation: mux_spop.c:eb_clrtag Unexecuted instantiation: pattern.c:eb_clrtag Unexecuted instantiation: payload.c:eb_clrtag Unexecuted instantiation: proto_tcp.c:eb_clrtag Unexecuted instantiation: shctx.c:eb_clrtag Unexecuted instantiation: stats-file.c:eb_clrtag Unexecuted instantiation: stats-json.c:eb_clrtag Unexecuted instantiation: stats-proxy.c:eb_clrtag Unexecuted instantiation: flt_spoe.c:eb_clrtag Unexecuted instantiation: h1_htx.c:eb_clrtag Unexecuted instantiation: lru.c:eb_clrtag |
424 | | |
425 | | /* Returns a pointer to the eb_node holding <root> */ |
426 | | static inline struct eb_node *eb_root_to_node(struct eb_root *root) |
427 | 0 | { |
428 | 0 | return container_of(root, struct eb_node, branches); |
429 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_root_to_node Unexecuted instantiation: fuzz_cfg_parser.c:eb_root_to_node Unexecuted instantiation: cfgparse.c:eb_root_to_node Unexecuted instantiation: chunk.c:eb_root_to_node Unexecuted instantiation: cli.c:eb_root_to_node Unexecuted instantiation: clock.c:eb_root_to_node Unexecuted instantiation: connection.c:eb_root_to_node Unexecuted instantiation: debug.c:eb_root_to_node Unexecuted instantiation: dynbuf.c:eb_root_to_node Unexecuted instantiation: eb32tree.c:eb_root_to_node Unexecuted instantiation: ebtree.c:eb_root_to_node Unexecuted instantiation: errors.c:eb_root_to_node Unexecuted instantiation: fd.c:eb_root_to_node Unexecuted instantiation: filters.c:eb_root_to_node Unexecuted instantiation: flt_http_comp.c:eb_root_to_node Unexecuted instantiation: freq_ctr.c:eb_root_to_node Unexecuted instantiation: frontend.c:eb_root_to_node Unexecuted instantiation: haproxy.c:eb_root_to_node Unexecuted instantiation: http.c:eb_root_to_node Unexecuted instantiation: http_ana.c:eb_root_to_node Unexecuted instantiation: http_ext.c:eb_root_to_node Unexecuted instantiation: http_htx.c:eb_root_to_node Unexecuted instantiation: http_rules.c:eb_root_to_node Unexecuted instantiation: lb_chash.c:eb_root_to_node Unexecuted instantiation: lb_fas.c:eb_root_to_node Unexecuted instantiation: lb_fwlc.c:eb_root_to_node Unexecuted instantiation: lb_fwrr.c:eb_root_to_node Unexecuted instantiation: lb_map.c:eb_root_to_node Unexecuted instantiation: lb_ss.c:eb_root_to_node Unexecuted instantiation: limits.c:eb_root_to_node Unexecuted instantiation: listener.c:eb_root_to_node Unexecuted instantiation: log.c:eb_root_to_node Unexecuted instantiation: mailers.c:eb_root_to_node Unexecuted instantiation: mworker.c:eb_root_to_node Unexecuted instantiation: peers.c:eb_root_to_node Unexecuted instantiation: pool.c:eb_root_to_node Unexecuted instantiation: proto_rhttp.c:eb_root_to_node Unexecuted instantiation: proto_sockpair.c:eb_root_to_node Unexecuted instantiation: protocol.c:eb_root_to_node Unexecuted instantiation: proxy.c:eb_root_to_node Unexecuted instantiation: queue.c:eb_root_to_node Unexecuted instantiation: regex.c:eb_root_to_node Unexecuted instantiation: resolvers.c:eb_root_to_node Unexecuted instantiation: ring.c:eb_root_to_node Unexecuted instantiation: sample.c:eb_root_to_node Unexecuted instantiation: server.c:eb_root_to_node Unexecuted instantiation: session.c:eb_root_to_node Unexecuted instantiation: signal.c:eb_root_to_node Unexecuted instantiation: sink.c:eb_root_to_node Unexecuted instantiation: sock.c:eb_root_to_node Unexecuted instantiation: sock_inet.c:eb_root_to_node Unexecuted instantiation: stats-html.c:eb_root_to_node Unexecuted instantiation: stats.c:eb_root_to_node Unexecuted instantiation: stconn.c:eb_root_to_node Unexecuted instantiation: stick_table.c:eb_root_to_node Unexecuted instantiation: stream.c:eb_root_to_node Unexecuted instantiation: systemd.c:eb_root_to_node Unexecuted instantiation: task.c:eb_root_to_node Unexecuted instantiation: tcp_rules.c:eb_root_to_node Unexecuted instantiation: tcpcheck.c:eb_root_to_node Unexecuted instantiation: thread.c:eb_root_to_node Unexecuted instantiation: tools.c:eb_root_to_node Unexecuted instantiation: trace.c:eb_root_to_node Unexecuted instantiation: uri_auth.c:eb_root_to_node Unexecuted instantiation: vars.c:eb_root_to_node Unexecuted instantiation: acl.c:eb_root_to_node Unexecuted instantiation: action.c:eb_root_to_node Unexecuted instantiation: activity.c:eb_root_to_node Unexecuted instantiation: applet.c:eb_root_to_node Unexecuted instantiation: arg.c:eb_root_to_node Unexecuted instantiation: backend.c:eb_root_to_node Unexecuted instantiation: cache.c:eb_root_to_node Unexecuted instantiation: cebu64_tree.c:eb_root_to_node Unexecuted instantiation: cebus_tree.c:eb_root_to_node Unexecuted instantiation: cfgcond.c:eb_root_to_node Unexecuted instantiation: cfgparse-global.c:eb_root_to_node Unexecuted instantiation: cfgparse-listen.c:eb_root_to_node Unexecuted instantiation: channel.c:eb_root_to_node Unexecuted instantiation: check.c:eb_root_to_node Unexecuted instantiation: compression.c:eb_root_to_node Unexecuted instantiation: dgram.c:eb_root_to_node Unexecuted instantiation: dict.c:eb_root_to_node Unexecuted instantiation: dns.c:eb_root_to_node Unexecuted instantiation: dns_ring.c:eb_root_to_node Unexecuted instantiation: eb64tree.c:eb_root_to_node Unexecuted instantiation: ebimtree.c:eb_root_to_node Unexecuted instantiation: ebistree.c:eb_root_to_node Unexecuted instantiation: ebmbtree.c:eb_root_to_node Unexecuted instantiation: ebsttree.c:eb_root_to_node Unexecuted instantiation: event_hdl.c:eb_root_to_node Unexecuted instantiation: extcheck.c:eb_root_to_node Unexecuted instantiation: fcgi-app.c:eb_root_to_node Unexecuted instantiation: fix.c:eb_root_to_node Unexecuted instantiation: guid.c:eb_root_to_node Unexecuted instantiation: h1.c:eb_root_to_node Unexecuted instantiation: http_fetch.c:eb_root_to_node Unexecuted instantiation: mqtt.c:eb_root_to_node Unexecuted instantiation: mux_spop.c:eb_root_to_node Unexecuted instantiation: pattern.c:eb_root_to_node Unexecuted instantiation: payload.c:eb_root_to_node Unexecuted instantiation: proto_tcp.c:eb_root_to_node Unexecuted instantiation: shctx.c:eb_root_to_node Unexecuted instantiation: stats-file.c:eb_root_to_node Unexecuted instantiation: stats-json.c:eb_root_to_node Unexecuted instantiation: stats-proxy.c:eb_root_to_node Unexecuted instantiation: flt_spoe.c:eb_root_to_node Unexecuted instantiation: h1_htx.c:eb_root_to_node Unexecuted instantiation: lru.c:eb_root_to_node |
430 | | |
431 | | /* Walks down starting at root pointer <start>, and always walking on side |
432 | | * <side>. It either returns the node hosting the first leaf on that side, |
433 | | * or NULL if no leaf is found. <start> may either be NULL or a branch pointer. |
434 | | * The pointer to the leaf (or NULL) is returned. |
435 | | */ |
436 | | static inline struct eb_node *eb_walk_down(eb_troot_t *start, unsigned int side) |
437 | 0 | { |
438 | | /* A NULL pointer on an empty tree root will be returned as-is */ |
439 | 0 | while (eb_gettag(start) == EB_NODE) |
440 | 0 | start = (eb_untag(start, EB_NODE))->b[side]; |
441 | | /* NULL is left untouched (root==eb_node, EB_LEAF==0) */ |
442 | 0 | return eb_root_to_node(eb_untag(start, EB_LEAF)); |
443 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_walk_down Unexecuted instantiation: fuzz_cfg_parser.c:eb_walk_down Unexecuted instantiation: cfgparse.c:eb_walk_down Unexecuted instantiation: chunk.c:eb_walk_down Unexecuted instantiation: cli.c:eb_walk_down Unexecuted instantiation: clock.c:eb_walk_down Unexecuted instantiation: connection.c:eb_walk_down Unexecuted instantiation: debug.c:eb_walk_down Unexecuted instantiation: dynbuf.c:eb_walk_down Unexecuted instantiation: eb32tree.c:eb_walk_down Unexecuted instantiation: ebtree.c:eb_walk_down Unexecuted instantiation: errors.c:eb_walk_down Unexecuted instantiation: fd.c:eb_walk_down Unexecuted instantiation: filters.c:eb_walk_down Unexecuted instantiation: flt_http_comp.c:eb_walk_down Unexecuted instantiation: freq_ctr.c:eb_walk_down Unexecuted instantiation: frontend.c:eb_walk_down Unexecuted instantiation: haproxy.c:eb_walk_down Unexecuted instantiation: http.c:eb_walk_down Unexecuted instantiation: http_ana.c:eb_walk_down Unexecuted instantiation: http_ext.c:eb_walk_down Unexecuted instantiation: http_htx.c:eb_walk_down Unexecuted instantiation: http_rules.c:eb_walk_down Unexecuted instantiation: lb_chash.c:eb_walk_down Unexecuted instantiation: lb_fas.c:eb_walk_down Unexecuted instantiation: lb_fwlc.c:eb_walk_down Unexecuted instantiation: lb_fwrr.c:eb_walk_down Unexecuted instantiation: lb_map.c:eb_walk_down Unexecuted instantiation: lb_ss.c:eb_walk_down Unexecuted instantiation: limits.c:eb_walk_down Unexecuted instantiation: listener.c:eb_walk_down Unexecuted instantiation: log.c:eb_walk_down Unexecuted instantiation: mailers.c:eb_walk_down Unexecuted instantiation: mworker.c:eb_walk_down Unexecuted instantiation: peers.c:eb_walk_down Unexecuted instantiation: pool.c:eb_walk_down Unexecuted instantiation: proto_rhttp.c:eb_walk_down Unexecuted instantiation: proto_sockpair.c:eb_walk_down Unexecuted instantiation: protocol.c:eb_walk_down Unexecuted instantiation: proxy.c:eb_walk_down Unexecuted instantiation: queue.c:eb_walk_down Unexecuted instantiation: regex.c:eb_walk_down Unexecuted instantiation: resolvers.c:eb_walk_down Unexecuted instantiation: ring.c:eb_walk_down Unexecuted instantiation: sample.c:eb_walk_down Unexecuted instantiation: server.c:eb_walk_down Unexecuted instantiation: session.c:eb_walk_down Unexecuted instantiation: signal.c:eb_walk_down Unexecuted instantiation: sink.c:eb_walk_down Unexecuted instantiation: sock.c:eb_walk_down Unexecuted instantiation: sock_inet.c:eb_walk_down Unexecuted instantiation: stats-html.c:eb_walk_down Unexecuted instantiation: stats.c:eb_walk_down Unexecuted instantiation: stconn.c:eb_walk_down Unexecuted instantiation: stick_table.c:eb_walk_down Unexecuted instantiation: stream.c:eb_walk_down Unexecuted instantiation: systemd.c:eb_walk_down Unexecuted instantiation: task.c:eb_walk_down Unexecuted instantiation: tcp_rules.c:eb_walk_down Unexecuted instantiation: tcpcheck.c:eb_walk_down Unexecuted instantiation: thread.c:eb_walk_down Unexecuted instantiation: tools.c:eb_walk_down Unexecuted instantiation: trace.c:eb_walk_down Unexecuted instantiation: uri_auth.c:eb_walk_down Unexecuted instantiation: vars.c:eb_walk_down Unexecuted instantiation: acl.c:eb_walk_down Unexecuted instantiation: action.c:eb_walk_down Unexecuted instantiation: activity.c:eb_walk_down Unexecuted instantiation: applet.c:eb_walk_down Unexecuted instantiation: arg.c:eb_walk_down Unexecuted instantiation: backend.c:eb_walk_down Unexecuted instantiation: cache.c:eb_walk_down Unexecuted instantiation: cebu64_tree.c:eb_walk_down Unexecuted instantiation: cebus_tree.c:eb_walk_down Unexecuted instantiation: cfgcond.c:eb_walk_down Unexecuted instantiation: cfgparse-global.c:eb_walk_down Unexecuted instantiation: cfgparse-listen.c:eb_walk_down Unexecuted instantiation: channel.c:eb_walk_down Unexecuted instantiation: check.c:eb_walk_down Unexecuted instantiation: compression.c:eb_walk_down Unexecuted instantiation: dgram.c:eb_walk_down Unexecuted instantiation: dict.c:eb_walk_down Unexecuted instantiation: dns.c:eb_walk_down Unexecuted instantiation: dns_ring.c:eb_walk_down Unexecuted instantiation: eb64tree.c:eb_walk_down Unexecuted instantiation: ebimtree.c:eb_walk_down Unexecuted instantiation: ebistree.c:eb_walk_down Unexecuted instantiation: ebmbtree.c:eb_walk_down Unexecuted instantiation: ebsttree.c:eb_walk_down Unexecuted instantiation: event_hdl.c:eb_walk_down Unexecuted instantiation: extcheck.c:eb_walk_down Unexecuted instantiation: fcgi-app.c:eb_walk_down Unexecuted instantiation: fix.c:eb_walk_down Unexecuted instantiation: guid.c:eb_walk_down Unexecuted instantiation: h1.c:eb_walk_down Unexecuted instantiation: http_fetch.c:eb_walk_down Unexecuted instantiation: mqtt.c:eb_walk_down Unexecuted instantiation: mux_spop.c:eb_walk_down Unexecuted instantiation: pattern.c:eb_walk_down Unexecuted instantiation: payload.c:eb_walk_down Unexecuted instantiation: proto_tcp.c:eb_walk_down Unexecuted instantiation: shctx.c:eb_walk_down Unexecuted instantiation: stats-file.c:eb_walk_down Unexecuted instantiation: stats-json.c:eb_walk_down Unexecuted instantiation: stats-proxy.c:eb_walk_down Unexecuted instantiation: flt_spoe.c:eb_walk_down Unexecuted instantiation: h1_htx.c:eb_walk_down Unexecuted instantiation: lru.c:eb_walk_down |
444 | | |
445 | | /* This function is used to build a tree of duplicates by adding a new node to |
446 | | * a subtree of at least 2 entries. It will probably never be needed inlined, |
447 | | * and it is not for end-user. |
448 | | */ |
449 | | static forceinline struct eb_node * |
450 | | __eb_insert_dup(struct eb_node *sub, struct eb_node *new) |
451 | 0 | { |
452 | 0 | struct eb_node *head = sub; |
453 | | |
454 | 0 | eb_troot_t *new_left = eb_dotag(&new->branches, EB_LEFT); |
455 | 0 | eb_troot_t *new_rght = eb_dotag(&new->branches, EB_RGHT); |
456 | 0 | eb_troot_t *new_leaf = eb_dotag(&new->branches, EB_LEAF); |
457 | | |
458 | | /* first, identify the deepest hole on the right branch */ |
459 | 0 | while (eb_gettag(head->branches.b[EB_RGHT]) != EB_LEAF) { |
460 | 0 | struct eb_node *last = head; |
461 | 0 | head = container_of(eb_untag(head->branches.b[EB_RGHT], EB_NODE), |
462 | 0 | struct eb_node, branches); |
463 | 0 | if (head->bit > last->bit + 1) |
464 | 0 | sub = head; /* there's a hole here */ |
465 | 0 | } |
466 | | |
467 | | /* Here we have a leaf attached to (head)->b[EB_RGHT] */ |
468 | 0 | if (head->bit < -1) { |
469 | | /* A hole exists just before the leaf, we insert there */ |
470 | 0 | new->bit = -1; |
471 | 0 | sub = container_of(eb_untag(head->branches.b[EB_RGHT], EB_LEAF), |
472 | 0 | struct eb_node, branches); |
473 | 0 | head->branches.b[EB_RGHT] = eb_dotag(&new->branches, EB_NODE); |
474 | |
|
475 | 0 | new->node_p = sub->leaf_p; |
476 | 0 | new->leaf_p = new_rght; |
477 | 0 | sub->leaf_p = new_left; |
478 | 0 | new->branches.b[EB_LEFT] = eb_dotag(&sub->branches, EB_LEAF); |
479 | 0 | new->branches.b[EB_RGHT] = new_leaf; |
480 | 0 | return new; |
481 | 0 | } else { |
482 | 0 | int side; |
483 | | /* No hole was found before a leaf. We have to insert above |
484 | | * <sub>. Note that we cannot be certain that <sub> is attached |
485 | | * to the right of its parent, as this is only true if <sub> |
486 | | * is inside the dup tree, not at the head. |
487 | | */ |
488 | 0 | new->bit = sub->bit - 1; /* install at the lowest level */ |
489 | 0 | side = eb_gettag(sub->node_p); |
490 | 0 | head = container_of(eb_untag(sub->node_p, side), struct eb_node, branches); |
491 | 0 | head->branches.b[side] = eb_dotag(&new->branches, EB_NODE); |
492 | | |
493 | 0 | new->node_p = sub->node_p; |
494 | 0 | new->leaf_p = new_rght; |
495 | 0 | sub->node_p = new_left; |
496 | 0 | new->branches.b[EB_LEFT] = eb_dotag(&sub->branches, EB_NODE); |
497 | 0 | new->branches.b[EB_RGHT] = new_leaf; |
498 | 0 | return new; |
499 | 0 | } |
500 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:__eb_insert_dup Unexecuted instantiation: fuzz_cfg_parser.c:__eb_insert_dup Unexecuted instantiation: cfgparse.c:__eb_insert_dup Unexecuted instantiation: chunk.c:__eb_insert_dup Unexecuted instantiation: cli.c:__eb_insert_dup Unexecuted instantiation: clock.c:__eb_insert_dup Unexecuted instantiation: connection.c:__eb_insert_dup Unexecuted instantiation: debug.c:__eb_insert_dup Unexecuted instantiation: dynbuf.c:__eb_insert_dup Unexecuted instantiation: eb32tree.c:__eb_insert_dup Unexecuted instantiation: ebtree.c:__eb_insert_dup Unexecuted instantiation: errors.c:__eb_insert_dup Unexecuted instantiation: fd.c:__eb_insert_dup Unexecuted instantiation: filters.c:__eb_insert_dup Unexecuted instantiation: flt_http_comp.c:__eb_insert_dup Unexecuted instantiation: freq_ctr.c:__eb_insert_dup Unexecuted instantiation: frontend.c:__eb_insert_dup Unexecuted instantiation: haproxy.c:__eb_insert_dup Unexecuted instantiation: http.c:__eb_insert_dup Unexecuted instantiation: http_ana.c:__eb_insert_dup Unexecuted instantiation: http_ext.c:__eb_insert_dup Unexecuted instantiation: http_htx.c:__eb_insert_dup Unexecuted instantiation: http_rules.c:__eb_insert_dup Unexecuted instantiation: lb_chash.c:__eb_insert_dup Unexecuted instantiation: lb_fas.c:__eb_insert_dup Unexecuted instantiation: lb_fwlc.c:__eb_insert_dup Unexecuted instantiation: lb_fwrr.c:__eb_insert_dup Unexecuted instantiation: lb_map.c:__eb_insert_dup Unexecuted instantiation: lb_ss.c:__eb_insert_dup Unexecuted instantiation: limits.c:__eb_insert_dup Unexecuted instantiation: listener.c:__eb_insert_dup Unexecuted instantiation: log.c:__eb_insert_dup Unexecuted instantiation: mailers.c:__eb_insert_dup Unexecuted instantiation: mworker.c:__eb_insert_dup Unexecuted instantiation: peers.c:__eb_insert_dup Unexecuted instantiation: pool.c:__eb_insert_dup Unexecuted instantiation: proto_rhttp.c:__eb_insert_dup Unexecuted instantiation: proto_sockpair.c:__eb_insert_dup Unexecuted instantiation: protocol.c:__eb_insert_dup Unexecuted instantiation: proxy.c:__eb_insert_dup Unexecuted instantiation: queue.c:__eb_insert_dup Unexecuted instantiation: regex.c:__eb_insert_dup Unexecuted instantiation: resolvers.c:__eb_insert_dup Unexecuted instantiation: ring.c:__eb_insert_dup Unexecuted instantiation: sample.c:__eb_insert_dup Unexecuted instantiation: server.c:__eb_insert_dup Unexecuted instantiation: session.c:__eb_insert_dup Unexecuted instantiation: signal.c:__eb_insert_dup Unexecuted instantiation: sink.c:__eb_insert_dup Unexecuted instantiation: sock.c:__eb_insert_dup Unexecuted instantiation: sock_inet.c:__eb_insert_dup Unexecuted instantiation: stats-html.c:__eb_insert_dup Unexecuted instantiation: stats.c:__eb_insert_dup Unexecuted instantiation: stconn.c:__eb_insert_dup Unexecuted instantiation: stick_table.c:__eb_insert_dup Unexecuted instantiation: stream.c:__eb_insert_dup Unexecuted instantiation: systemd.c:__eb_insert_dup Unexecuted instantiation: task.c:__eb_insert_dup Unexecuted instantiation: tcp_rules.c:__eb_insert_dup Unexecuted instantiation: tcpcheck.c:__eb_insert_dup Unexecuted instantiation: thread.c:__eb_insert_dup Unexecuted instantiation: tools.c:__eb_insert_dup Unexecuted instantiation: trace.c:__eb_insert_dup Unexecuted instantiation: uri_auth.c:__eb_insert_dup Unexecuted instantiation: vars.c:__eb_insert_dup Unexecuted instantiation: acl.c:__eb_insert_dup Unexecuted instantiation: action.c:__eb_insert_dup Unexecuted instantiation: activity.c:__eb_insert_dup Unexecuted instantiation: applet.c:__eb_insert_dup Unexecuted instantiation: arg.c:__eb_insert_dup Unexecuted instantiation: backend.c:__eb_insert_dup Unexecuted instantiation: cache.c:__eb_insert_dup Unexecuted instantiation: cebu64_tree.c:__eb_insert_dup Unexecuted instantiation: cebus_tree.c:__eb_insert_dup Unexecuted instantiation: cfgcond.c:__eb_insert_dup Unexecuted instantiation: cfgparse-global.c:__eb_insert_dup Unexecuted instantiation: cfgparse-listen.c:__eb_insert_dup Unexecuted instantiation: channel.c:__eb_insert_dup Unexecuted instantiation: check.c:__eb_insert_dup Unexecuted instantiation: compression.c:__eb_insert_dup Unexecuted instantiation: dgram.c:__eb_insert_dup Unexecuted instantiation: dict.c:__eb_insert_dup Unexecuted instantiation: dns.c:__eb_insert_dup Unexecuted instantiation: dns_ring.c:__eb_insert_dup Unexecuted instantiation: eb64tree.c:__eb_insert_dup Unexecuted instantiation: ebimtree.c:__eb_insert_dup Unexecuted instantiation: ebistree.c:__eb_insert_dup Unexecuted instantiation: ebmbtree.c:__eb_insert_dup Unexecuted instantiation: ebsttree.c:__eb_insert_dup Unexecuted instantiation: event_hdl.c:__eb_insert_dup Unexecuted instantiation: extcheck.c:__eb_insert_dup Unexecuted instantiation: fcgi-app.c:__eb_insert_dup Unexecuted instantiation: fix.c:__eb_insert_dup Unexecuted instantiation: guid.c:__eb_insert_dup Unexecuted instantiation: h1.c:__eb_insert_dup Unexecuted instantiation: http_fetch.c:__eb_insert_dup Unexecuted instantiation: mqtt.c:__eb_insert_dup Unexecuted instantiation: mux_spop.c:__eb_insert_dup Unexecuted instantiation: pattern.c:__eb_insert_dup Unexecuted instantiation: payload.c:__eb_insert_dup Unexecuted instantiation: proto_tcp.c:__eb_insert_dup Unexecuted instantiation: shctx.c:__eb_insert_dup Unexecuted instantiation: stats-file.c:__eb_insert_dup Unexecuted instantiation: stats-json.c:__eb_insert_dup Unexecuted instantiation: stats-proxy.c:__eb_insert_dup Unexecuted instantiation: flt_spoe.c:__eb_insert_dup Unexecuted instantiation: h1_htx.c:__eb_insert_dup Unexecuted instantiation: lru.c:__eb_insert_dup |
501 | | |
502 | | |
503 | | /**************************************\ |
504 | | * Public functions, for the end-user * |
505 | | \**************************************/ |
506 | | |
507 | | /* Return non-zero if the tree is empty, otherwise zero */ |
508 | | static inline int eb_is_empty(const struct eb_root *root) |
509 | 0 | { |
510 | 0 | return !root->b[EB_LEFT]; |
511 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_is_empty Unexecuted instantiation: fuzz_cfg_parser.c:eb_is_empty Unexecuted instantiation: cfgparse.c:eb_is_empty Unexecuted instantiation: chunk.c:eb_is_empty Unexecuted instantiation: cli.c:eb_is_empty Unexecuted instantiation: clock.c:eb_is_empty Unexecuted instantiation: connection.c:eb_is_empty Unexecuted instantiation: debug.c:eb_is_empty Unexecuted instantiation: dynbuf.c:eb_is_empty Unexecuted instantiation: eb32tree.c:eb_is_empty Unexecuted instantiation: ebtree.c:eb_is_empty Unexecuted instantiation: errors.c:eb_is_empty Unexecuted instantiation: fd.c:eb_is_empty Unexecuted instantiation: filters.c:eb_is_empty Unexecuted instantiation: flt_http_comp.c:eb_is_empty Unexecuted instantiation: freq_ctr.c:eb_is_empty Unexecuted instantiation: frontend.c:eb_is_empty Unexecuted instantiation: haproxy.c:eb_is_empty Unexecuted instantiation: http.c:eb_is_empty Unexecuted instantiation: http_ana.c:eb_is_empty Unexecuted instantiation: http_ext.c:eb_is_empty Unexecuted instantiation: http_htx.c:eb_is_empty Unexecuted instantiation: http_rules.c:eb_is_empty Unexecuted instantiation: lb_chash.c:eb_is_empty Unexecuted instantiation: lb_fas.c:eb_is_empty Unexecuted instantiation: lb_fwlc.c:eb_is_empty Unexecuted instantiation: lb_fwrr.c:eb_is_empty Unexecuted instantiation: lb_map.c:eb_is_empty Unexecuted instantiation: lb_ss.c:eb_is_empty Unexecuted instantiation: limits.c:eb_is_empty Unexecuted instantiation: listener.c:eb_is_empty Unexecuted instantiation: log.c:eb_is_empty Unexecuted instantiation: mailers.c:eb_is_empty Unexecuted instantiation: mworker.c:eb_is_empty Unexecuted instantiation: peers.c:eb_is_empty Unexecuted instantiation: pool.c:eb_is_empty Unexecuted instantiation: proto_rhttp.c:eb_is_empty Unexecuted instantiation: proto_sockpair.c:eb_is_empty Unexecuted instantiation: protocol.c:eb_is_empty Unexecuted instantiation: proxy.c:eb_is_empty Unexecuted instantiation: queue.c:eb_is_empty Unexecuted instantiation: regex.c:eb_is_empty Unexecuted instantiation: resolvers.c:eb_is_empty Unexecuted instantiation: ring.c:eb_is_empty Unexecuted instantiation: sample.c:eb_is_empty Unexecuted instantiation: server.c:eb_is_empty Unexecuted instantiation: session.c:eb_is_empty Unexecuted instantiation: signal.c:eb_is_empty Unexecuted instantiation: sink.c:eb_is_empty Unexecuted instantiation: sock.c:eb_is_empty Unexecuted instantiation: sock_inet.c:eb_is_empty Unexecuted instantiation: stats-html.c:eb_is_empty Unexecuted instantiation: stats.c:eb_is_empty Unexecuted instantiation: stconn.c:eb_is_empty Unexecuted instantiation: stick_table.c:eb_is_empty Unexecuted instantiation: stream.c:eb_is_empty Unexecuted instantiation: systemd.c:eb_is_empty Unexecuted instantiation: task.c:eb_is_empty Unexecuted instantiation: tcp_rules.c:eb_is_empty Unexecuted instantiation: tcpcheck.c:eb_is_empty Unexecuted instantiation: thread.c:eb_is_empty Unexecuted instantiation: tools.c:eb_is_empty Unexecuted instantiation: trace.c:eb_is_empty Unexecuted instantiation: uri_auth.c:eb_is_empty Unexecuted instantiation: vars.c:eb_is_empty Unexecuted instantiation: acl.c:eb_is_empty Unexecuted instantiation: action.c:eb_is_empty Unexecuted instantiation: activity.c:eb_is_empty Unexecuted instantiation: applet.c:eb_is_empty Unexecuted instantiation: arg.c:eb_is_empty Unexecuted instantiation: backend.c:eb_is_empty Unexecuted instantiation: cache.c:eb_is_empty Unexecuted instantiation: cebu64_tree.c:eb_is_empty Unexecuted instantiation: cebus_tree.c:eb_is_empty Unexecuted instantiation: cfgcond.c:eb_is_empty Unexecuted instantiation: cfgparse-global.c:eb_is_empty Unexecuted instantiation: cfgparse-listen.c:eb_is_empty Unexecuted instantiation: channel.c:eb_is_empty Unexecuted instantiation: check.c:eb_is_empty Unexecuted instantiation: compression.c:eb_is_empty Unexecuted instantiation: dgram.c:eb_is_empty Unexecuted instantiation: dict.c:eb_is_empty Unexecuted instantiation: dns.c:eb_is_empty Unexecuted instantiation: dns_ring.c:eb_is_empty Unexecuted instantiation: eb64tree.c:eb_is_empty Unexecuted instantiation: ebimtree.c:eb_is_empty Unexecuted instantiation: ebistree.c:eb_is_empty Unexecuted instantiation: ebmbtree.c:eb_is_empty Unexecuted instantiation: ebsttree.c:eb_is_empty Unexecuted instantiation: event_hdl.c:eb_is_empty Unexecuted instantiation: extcheck.c:eb_is_empty Unexecuted instantiation: fcgi-app.c:eb_is_empty Unexecuted instantiation: fix.c:eb_is_empty Unexecuted instantiation: guid.c:eb_is_empty Unexecuted instantiation: h1.c:eb_is_empty Unexecuted instantiation: http_fetch.c:eb_is_empty Unexecuted instantiation: mqtt.c:eb_is_empty Unexecuted instantiation: mux_spop.c:eb_is_empty Unexecuted instantiation: pattern.c:eb_is_empty Unexecuted instantiation: payload.c:eb_is_empty Unexecuted instantiation: proto_tcp.c:eb_is_empty Unexecuted instantiation: shctx.c:eb_is_empty Unexecuted instantiation: stats-file.c:eb_is_empty Unexecuted instantiation: stats-json.c:eb_is_empty Unexecuted instantiation: stats-proxy.c:eb_is_empty Unexecuted instantiation: flt_spoe.c:eb_is_empty Unexecuted instantiation: h1_htx.c:eb_is_empty Unexecuted instantiation: lru.c:eb_is_empty |
512 | | |
513 | | /* Return non-zero if the node is a duplicate, otherwise zero */ |
514 | | static inline int eb_is_dup(const struct eb_node *node) |
515 | 0 | { |
516 | 0 | return node->bit < 0; |
517 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_is_dup Unexecuted instantiation: fuzz_cfg_parser.c:eb_is_dup Unexecuted instantiation: cfgparse.c:eb_is_dup Unexecuted instantiation: chunk.c:eb_is_dup Unexecuted instantiation: cli.c:eb_is_dup Unexecuted instantiation: clock.c:eb_is_dup Unexecuted instantiation: connection.c:eb_is_dup Unexecuted instantiation: debug.c:eb_is_dup Unexecuted instantiation: dynbuf.c:eb_is_dup Unexecuted instantiation: eb32tree.c:eb_is_dup Unexecuted instantiation: ebtree.c:eb_is_dup Unexecuted instantiation: errors.c:eb_is_dup Unexecuted instantiation: fd.c:eb_is_dup Unexecuted instantiation: filters.c:eb_is_dup Unexecuted instantiation: flt_http_comp.c:eb_is_dup Unexecuted instantiation: freq_ctr.c:eb_is_dup Unexecuted instantiation: frontend.c:eb_is_dup Unexecuted instantiation: haproxy.c:eb_is_dup Unexecuted instantiation: http.c:eb_is_dup Unexecuted instantiation: http_ana.c:eb_is_dup Unexecuted instantiation: http_ext.c:eb_is_dup Unexecuted instantiation: http_htx.c:eb_is_dup Unexecuted instantiation: http_rules.c:eb_is_dup Unexecuted instantiation: lb_chash.c:eb_is_dup Unexecuted instantiation: lb_fas.c:eb_is_dup Unexecuted instantiation: lb_fwlc.c:eb_is_dup Unexecuted instantiation: lb_fwrr.c:eb_is_dup Unexecuted instantiation: lb_map.c:eb_is_dup Unexecuted instantiation: lb_ss.c:eb_is_dup Unexecuted instantiation: limits.c:eb_is_dup Unexecuted instantiation: listener.c:eb_is_dup Unexecuted instantiation: log.c:eb_is_dup Unexecuted instantiation: mailers.c:eb_is_dup Unexecuted instantiation: mworker.c:eb_is_dup Unexecuted instantiation: peers.c:eb_is_dup Unexecuted instantiation: pool.c:eb_is_dup Unexecuted instantiation: proto_rhttp.c:eb_is_dup Unexecuted instantiation: proto_sockpair.c:eb_is_dup Unexecuted instantiation: protocol.c:eb_is_dup Unexecuted instantiation: proxy.c:eb_is_dup Unexecuted instantiation: queue.c:eb_is_dup Unexecuted instantiation: regex.c:eb_is_dup Unexecuted instantiation: resolvers.c:eb_is_dup Unexecuted instantiation: ring.c:eb_is_dup Unexecuted instantiation: sample.c:eb_is_dup Unexecuted instantiation: server.c:eb_is_dup Unexecuted instantiation: session.c:eb_is_dup Unexecuted instantiation: signal.c:eb_is_dup Unexecuted instantiation: sink.c:eb_is_dup Unexecuted instantiation: sock.c:eb_is_dup Unexecuted instantiation: sock_inet.c:eb_is_dup Unexecuted instantiation: stats-html.c:eb_is_dup Unexecuted instantiation: stats.c:eb_is_dup Unexecuted instantiation: stconn.c:eb_is_dup Unexecuted instantiation: stick_table.c:eb_is_dup Unexecuted instantiation: stream.c:eb_is_dup Unexecuted instantiation: systemd.c:eb_is_dup Unexecuted instantiation: task.c:eb_is_dup Unexecuted instantiation: tcp_rules.c:eb_is_dup Unexecuted instantiation: tcpcheck.c:eb_is_dup Unexecuted instantiation: thread.c:eb_is_dup Unexecuted instantiation: tools.c:eb_is_dup Unexecuted instantiation: trace.c:eb_is_dup Unexecuted instantiation: uri_auth.c:eb_is_dup Unexecuted instantiation: vars.c:eb_is_dup Unexecuted instantiation: acl.c:eb_is_dup Unexecuted instantiation: action.c:eb_is_dup Unexecuted instantiation: activity.c:eb_is_dup Unexecuted instantiation: applet.c:eb_is_dup Unexecuted instantiation: arg.c:eb_is_dup Unexecuted instantiation: backend.c:eb_is_dup Unexecuted instantiation: cache.c:eb_is_dup Unexecuted instantiation: cebu64_tree.c:eb_is_dup Unexecuted instantiation: cebus_tree.c:eb_is_dup Unexecuted instantiation: cfgcond.c:eb_is_dup Unexecuted instantiation: cfgparse-global.c:eb_is_dup Unexecuted instantiation: cfgparse-listen.c:eb_is_dup Unexecuted instantiation: channel.c:eb_is_dup Unexecuted instantiation: check.c:eb_is_dup Unexecuted instantiation: compression.c:eb_is_dup Unexecuted instantiation: dgram.c:eb_is_dup Unexecuted instantiation: dict.c:eb_is_dup Unexecuted instantiation: dns.c:eb_is_dup Unexecuted instantiation: dns_ring.c:eb_is_dup Unexecuted instantiation: eb64tree.c:eb_is_dup Unexecuted instantiation: ebimtree.c:eb_is_dup Unexecuted instantiation: ebistree.c:eb_is_dup Unexecuted instantiation: ebmbtree.c:eb_is_dup Unexecuted instantiation: ebsttree.c:eb_is_dup Unexecuted instantiation: event_hdl.c:eb_is_dup Unexecuted instantiation: extcheck.c:eb_is_dup Unexecuted instantiation: fcgi-app.c:eb_is_dup Unexecuted instantiation: fix.c:eb_is_dup Unexecuted instantiation: guid.c:eb_is_dup Unexecuted instantiation: h1.c:eb_is_dup Unexecuted instantiation: http_fetch.c:eb_is_dup Unexecuted instantiation: mqtt.c:eb_is_dup Unexecuted instantiation: mux_spop.c:eb_is_dup Unexecuted instantiation: pattern.c:eb_is_dup Unexecuted instantiation: payload.c:eb_is_dup Unexecuted instantiation: proto_tcp.c:eb_is_dup Unexecuted instantiation: shctx.c:eb_is_dup Unexecuted instantiation: stats-file.c:eb_is_dup Unexecuted instantiation: stats-json.c:eb_is_dup Unexecuted instantiation: stats-proxy.c:eb_is_dup Unexecuted instantiation: flt_spoe.c:eb_is_dup Unexecuted instantiation: h1_htx.c:eb_is_dup Unexecuted instantiation: lru.c:eb_is_dup |
518 | | |
519 | | /* Return the first leaf in the tree starting at <root>, or NULL if none */ |
520 | | static inline struct eb_node *eb_first(struct eb_root *root) |
521 | 0 | { |
522 | 0 | return eb_walk_down(root->b[0], EB_LEFT); |
523 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_first Unexecuted instantiation: fuzz_cfg_parser.c:eb_first Unexecuted instantiation: cfgparse.c:eb_first Unexecuted instantiation: chunk.c:eb_first Unexecuted instantiation: cli.c:eb_first Unexecuted instantiation: clock.c:eb_first Unexecuted instantiation: connection.c:eb_first Unexecuted instantiation: debug.c:eb_first Unexecuted instantiation: dynbuf.c:eb_first Unexecuted instantiation: eb32tree.c:eb_first Unexecuted instantiation: ebtree.c:eb_first Unexecuted instantiation: errors.c:eb_first Unexecuted instantiation: fd.c:eb_first Unexecuted instantiation: filters.c:eb_first Unexecuted instantiation: flt_http_comp.c:eb_first Unexecuted instantiation: freq_ctr.c:eb_first Unexecuted instantiation: frontend.c:eb_first Unexecuted instantiation: haproxy.c:eb_first Unexecuted instantiation: http.c:eb_first Unexecuted instantiation: http_ana.c:eb_first Unexecuted instantiation: http_ext.c:eb_first Unexecuted instantiation: http_htx.c:eb_first Unexecuted instantiation: http_rules.c:eb_first Unexecuted instantiation: lb_chash.c:eb_first Unexecuted instantiation: lb_fas.c:eb_first Unexecuted instantiation: lb_fwlc.c:eb_first Unexecuted instantiation: lb_fwrr.c:eb_first Unexecuted instantiation: lb_map.c:eb_first Unexecuted instantiation: lb_ss.c:eb_first Unexecuted instantiation: limits.c:eb_first Unexecuted instantiation: listener.c:eb_first Unexecuted instantiation: log.c:eb_first Unexecuted instantiation: mailers.c:eb_first Unexecuted instantiation: mworker.c:eb_first Unexecuted instantiation: peers.c:eb_first Unexecuted instantiation: pool.c:eb_first Unexecuted instantiation: proto_rhttp.c:eb_first Unexecuted instantiation: proto_sockpair.c:eb_first Unexecuted instantiation: protocol.c:eb_first Unexecuted instantiation: proxy.c:eb_first Unexecuted instantiation: queue.c:eb_first Unexecuted instantiation: regex.c:eb_first Unexecuted instantiation: resolvers.c:eb_first Unexecuted instantiation: ring.c:eb_first Unexecuted instantiation: sample.c:eb_first Unexecuted instantiation: server.c:eb_first Unexecuted instantiation: session.c:eb_first Unexecuted instantiation: signal.c:eb_first Unexecuted instantiation: sink.c:eb_first Unexecuted instantiation: sock.c:eb_first Unexecuted instantiation: sock_inet.c:eb_first Unexecuted instantiation: stats-html.c:eb_first Unexecuted instantiation: stats.c:eb_first Unexecuted instantiation: stconn.c:eb_first Unexecuted instantiation: stick_table.c:eb_first Unexecuted instantiation: stream.c:eb_first Unexecuted instantiation: systemd.c:eb_first Unexecuted instantiation: task.c:eb_first Unexecuted instantiation: tcp_rules.c:eb_first Unexecuted instantiation: tcpcheck.c:eb_first Unexecuted instantiation: thread.c:eb_first Unexecuted instantiation: tools.c:eb_first Unexecuted instantiation: trace.c:eb_first Unexecuted instantiation: uri_auth.c:eb_first Unexecuted instantiation: vars.c:eb_first Unexecuted instantiation: acl.c:eb_first Unexecuted instantiation: action.c:eb_first Unexecuted instantiation: activity.c:eb_first Unexecuted instantiation: applet.c:eb_first Unexecuted instantiation: arg.c:eb_first Unexecuted instantiation: backend.c:eb_first Unexecuted instantiation: cache.c:eb_first Unexecuted instantiation: cebu64_tree.c:eb_first Unexecuted instantiation: cebus_tree.c:eb_first Unexecuted instantiation: cfgcond.c:eb_first Unexecuted instantiation: cfgparse-global.c:eb_first Unexecuted instantiation: cfgparse-listen.c:eb_first Unexecuted instantiation: channel.c:eb_first Unexecuted instantiation: check.c:eb_first Unexecuted instantiation: compression.c:eb_first Unexecuted instantiation: dgram.c:eb_first Unexecuted instantiation: dict.c:eb_first Unexecuted instantiation: dns.c:eb_first Unexecuted instantiation: dns_ring.c:eb_first Unexecuted instantiation: eb64tree.c:eb_first Unexecuted instantiation: ebimtree.c:eb_first Unexecuted instantiation: ebistree.c:eb_first Unexecuted instantiation: ebmbtree.c:eb_first Unexecuted instantiation: ebsttree.c:eb_first Unexecuted instantiation: event_hdl.c:eb_first Unexecuted instantiation: extcheck.c:eb_first Unexecuted instantiation: fcgi-app.c:eb_first Unexecuted instantiation: fix.c:eb_first Unexecuted instantiation: guid.c:eb_first Unexecuted instantiation: h1.c:eb_first Unexecuted instantiation: http_fetch.c:eb_first Unexecuted instantiation: mqtt.c:eb_first Unexecuted instantiation: mux_spop.c:eb_first Unexecuted instantiation: pattern.c:eb_first Unexecuted instantiation: payload.c:eb_first Unexecuted instantiation: proto_tcp.c:eb_first Unexecuted instantiation: shctx.c:eb_first Unexecuted instantiation: stats-file.c:eb_first Unexecuted instantiation: stats-json.c:eb_first Unexecuted instantiation: stats-proxy.c:eb_first Unexecuted instantiation: flt_spoe.c:eb_first Unexecuted instantiation: h1_htx.c:eb_first Unexecuted instantiation: lru.c:eb_first |
524 | | |
525 | | /* Return the last leaf in the tree starting at <root>, or NULL if none */ |
526 | | static inline struct eb_node *eb_last(struct eb_root *root) |
527 | 0 | { |
528 | 0 | return eb_walk_down(root->b[0], EB_RGHT); |
529 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_last Unexecuted instantiation: fuzz_cfg_parser.c:eb_last Unexecuted instantiation: cfgparse.c:eb_last Unexecuted instantiation: chunk.c:eb_last Unexecuted instantiation: cli.c:eb_last Unexecuted instantiation: clock.c:eb_last Unexecuted instantiation: connection.c:eb_last Unexecuted instantiation: debug.c:eb_last Unexecuted instantiation: dynbuf.c:eb_last Unexecuted instantiation: eb32tree.c:eb_last Unexecuted instantiation: ebtree.c:eb_last Unexecuted instantiation: errors.c:eb_last Unexecuted instantiation: fd.c:eb_last Unexecuted instantiation: filters.c:eb_last Unexecuted instantiation: flt_http_comp.c:eb_last Unexecuted instantiation: freq_ctr.c:eb_last Unexecuted instantiation: frontend.c:eb_last Unexecuted instantiation: haproxy.c:eb_last Unexecuted instantiation: http.c:eb_last Unexecuted instantiation: http_ana.c:eb_last Unexecuted instantiation: http_ext.c:eb_last Unexecuted instantiation: http_htx.c:eb_last Unexecuted instantiation: http_rules.c:eb_last Unexecuted instantiation: lb_chash.c:eb_last Unexecuted instantiation: lb_fas.c:eb_last Unexecuted instantiation: lb_fwlc.c:eb_last Unexecuted instantiation: lb_fwrr.c:eb_last Unexecuted instantiation: lb_map.c:eb_last Unexecuted instantiation: lb_ss.c:eb_last Unexecuted instantiation: limits.c:eb_last Unexecuted instantiation: listener.c:eb_last Unexecuted instantiation: log.c:eb_last Unexecuted instantiation: mailers.c:eb_last Unexecuted instantiation: mworker.c:eb_last Unexecuted instantiation: peers.c:eb_last Unexecuted instantiation: pool.c:eb_last Unexecuted instantiation: proto_rhttp.c:eb_last Unexecuted instantiation: proto_sockpair.c:eb_last Unexecuted instantiation: protocol.c:eb_last Unexecuted instantiation: proxy.c:eb_last Unexecuted instantiation: queue.c:eb_last Unexecuted instantiation: regex.c:eb_last Unexecuted instantiation: resolvers.c:eb_last Unexecuted instantiation: ring.c:eb_last Unexecuted instantiation: sample.c:eb_last Unexecuted instantiation: server.c:eb_last Unexecuted instantiation: session.c:eb_last Unexecuted instantiation: signal.c:eb_last Unexecuted instantiation: sink.c:eb_last Unexecuted instantiation: sock.c:eb_last Unexecuted instantiation: sock_inet.c:eb_last Unexecuted instantiation: stats-html.c:eb_last Unexecuted instantiation: stats.c:eb_last Unexecuted instantiation: stconn.c:eb_last Unexecuted instantiation: stick_table.c:eb_last Unexecuted instantiation: stream.c:eb_last Unexecuted instantiation: systemd.c:eb_last Unexecuted instantiation: task.c:eb_last Unexecuted instantiation: tcp_rules.c:eb_last Unexecuted instantiation: tcpcheck.c:eb_last Unexecuted instantiation: thread.c:eb_last Unexecuted instantiation: tools.c:eb_last Unexecuted instantiation: trace.c:eb_last Unexecuted instantiation: uri_auth.c:eb_last Unexecuted instantiation: vars.c:eb_last Unexecuted instantiation: acl.c:eb_last Unexecuted instantiation: action.c:eb_last Unexecuted instantiation: activity.c:eb_last Unexecuted instantiation: applet.c:eb_last Unexecuted instantiation: arg.c:eb_last Unexecuted instantiation: backend.c:eb_last Unexecuted instantiation: cache.c:eb_last Unexecuted instantiation: cebu64_tree.c:eb_last Unexecuted instantiation: cebus_tree.c:eb_last Unexecuted instantiation: cfgcond.c:eb_last Unexecuted instantiation: cfgparse-global.c:eb_last Unexecuted instantiation: cfgparse-listen.c:eb_last Unexecuted instantiation: channel.c:eb_last Unexecuted instantiation: check.c:eb_last Unexecuted instantiation: compression.c:eb_last Unexecuted instantiation: dgram.c:eb_last Unexecuted instantiation: dict.c:eb_last Unexecuted instantiation: dns.c:eb_last Unexecuted instantiation: dns_ring.c:eb_last Unexecuted instantiation: eb64tree.c:eb_last Unexecuted instantiation: ebimtree.c:eb_last Unexecuted instantiation: ebistree.c:eb_last Unexecuted instantiation: ebmbtree.c:eb_last Unexecuted instantiation: ebsttree.c:eb_last Unexecuted instantiation: event_hdl.c:eb_last Unexecuted instantiation: extcheck.c:eb_last Unexecuted instantiation: fcgi-app.c:eb_last Unexecuted instantiation: fix.c:eb_last Unexecuted instantiation: guid.c:eb_last Unexecuted instantiation: h1.c:eb_last Unexecuted instantiation: http_fetch.c:eb_last Unexecuted instantiation: mqtt.c:eb_last Unexecuted instantiation: mux_spop.c:eb_last Unexecuted instantiation: pattern.c:eb_last Unexecuted instantiation: payload.c:eb_last Unexecuted instantiation: proto_tcp.c:eb_last Unexecuted instantiation: shctx.c:eb_last Unexecuted instantiation: stats-file.c:eb_last Unexecuted instantiation: stats-json.c:eb_last Unexecuted instantiation: stats-proxy.c:eb_last Unexecuted instantiation: flt_spoe.c:eb_last Unexecuted instantiation: h1_htx.c:eb_last Unexecuted instantiation: lru.c:eb_last |
530 | | |
531 | | /* Return previous leaf node before an existing leaf node, or NULL if none. */ |
532 | | static inline struct eb_node *eb_prev(struct eb_node *node) |
533 | 0 | { |
534 | 0 | eb_troot_t *t = node->leaf_p; |
535 | |
|
536 | 0 | while (eb_gettag(t) == EB_LEFT) { |
537 | | /* Walking up from left branch. We must ensure that we never |
538 | | * walk beyond root. |
539 | | */ |
540 | 0 | if (unlikely(eb_clrtag((eb_untag(t, EB_LEFT))->b[EB_RGHT]) == NULL)) |
541 | 0 | return NULL; |
542 | 0 | t = (eb_root_to_node(eb_untag(t, EB_LEFT)))->node_p; |
543 | 0 | } |
544 | | /* Note that <t> cannot be NULL at this stage */ |
545 | 0 | t = (eb_untag(t, EB_RGHT))->b[EB_LEFT]; |
546 | 0 | return eb_walk_down(t, EB_RGHT); |
547 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_prev Unexecuted instantiation: fuzz_cfg_parser.c:eb_prev Unexecuted instantiation: cfgparse.c:eb_prev Unexecuted instantiation: chunk.c:eb_prev Unexecuted instantiation: cli.c:eb_prev Unexecuted instantiation: clock.c:eb_prev Unexecuted instantiation: connection.c:eb_prev Unexecuted instantiation: debug.c:eb_prev Unexecuted instantiation: dynbuf.c:eb_prev Unexecuted instantiation: eb32tree.c:eb_prev Unexecuted instantiation: ebtree.c:eb_prev Unexecuted instantiation: errors.c:eb_prev Unexecuted instantiation: fd.c:eb_prev Unexecuted instantiation: filters.c:eb_prev Unexecuted instantiation: flt_http_comp.c:eb_prev Unexecuted instantiation: freq_ctr.c:eb_prev Unexecuted instantiation: frontend.c:eb_prev Unexecuted instantiation: haproxy.c:eb_prev Unexecuted instantiation: http.c:eb_prev Unexecuted instantiation: http_ana.c:eb_prev Unexecuted instantiation: http_ext.c:eb_prev Unexecuted instantiation: http_htx.c:eb_prev Unexecuted instantiation: http_rules.c:eb_prev Unexecuted instantiation: lb_chash.c:eb_prev Unexecuted instantiation: lb_fas.c:eb_prev Unexecuted instantiation: lb_fwlc.c:eb_prev Unexecuted instantiation: lb_fwrr.c:eb_prev Unexecuted instantiation: lb_map.c:eb_prev Unexecuted instantiation: lb_ss.c:eb_prev Unexecuted instantiation: limits.c:eb_prev Unexecuted instantiation: listener.c:eb_prev Unexecuted instantiation: log.c:eb_prev Unexecuted instantiation: mailers.c:eb_prev Unexecuted instantiation: mworker.c:eb_prev Unexecuted instantiation: peers.c:eb_prev Unexecuted instantiation: pool.c:eb_prev Unexecuted instantiation: proto_rhttp.c:eb_prev Unexecuted instantiation: proto_sockpair.c:eb_prev Unexecuted instantiation: protocol.c:eb_prev Unexecuted instantiation: proxy.c:eb_prev Unexecuted instantiation: queue.c:eb_prev Unexecuted instantiation: regex.c:eb_prev Unexecuted instantiation: resolvers.c:eb_prev Unexecuted instantiation: ring.c:eb_prev Unexecuted instantiation: sample.c:eb_prev Unexecuted instantiation: server.c:eb_prev Unexecuted instantiation: session.c:eb_prev Unexecuted instantiation: signal.c:eb_prev Unexecuted instantiation: sink.c:eb_prev Unexecuted instantiation: sock.c:eb_prev Unexecuted instantiation: sock_inet.c:eb_prev Unexecuted instantiation: stats-html.c:eb_prev Unexecuted instantiation: stats.c:eb_prev Unexecuted instantiation: stconn.c:eb_prev Unexecuted instantiation: stick_table.c:eb_prev Unexecuted instantiation: stream.c:eb_prev Unexecuted instantiation: systemd.c:eb_prev Unexecuted instantiation: task.c:eb_prev Unexecuted instantiation: tcp_rules.c:eb_prev Unexecuted instantiation: tcpcheck.c:eb_prev Unexecuted instantiation: thread.c:eb_prev Unexecuted instantiation: tools.c:eb_prev Unexecuted instantiation: trace.c:eb_prev Unexecuted instantiation: uri_auth.c:eb_prev Unexecuted instantiation: vars.c:eb_prev Unexecuted instantiation: acl.c:eb_prev Unexecuted instantiation: action.c:eb_prev Unexecuted instantiation: activity.c:eb_prev Unexecuted instantiation: applet.c:eb_prev Unexecuted instantiation: arg.c:eb_prev Unexecuted instantiation: backend.c:eb_prev Unexecuted instantiation: cache.c:eb_prev Unexecuted instantiation: cebu64_tree.c:eb_prev Unexecuted instantiation: cebus_tree.c:eb_prev Unexecuted instantiation: cfgcond.c:eb_prev Unexecuted instantiation: cfgparse-global.c:eb_prev Unexecuted instantiation: cfgparse-listen.c:eb_prev Unexecuted instantiation: channel.c:eb_prev Unexecuted instantiation: check.c:eb_prev Unexecuted instantiation: compression.c:eb_prev Unexecuted instantiation: dgram.c:eb_prev Unexecuted instantiation: dict.c:eb_prev Unexecuted instantiation: dns.c:eb_prev Unexecuted instantiation: dns_ring.c:eb_prev Unexecuted instantiation: eb64tree.c:eb_prev Unexecuted instantiation: ebimtree.c:eb_prev Unexecuted instantiation: ebistree.c:eb_prev Unexecuted instantiation: ebmbtree.c:eb_prev Unexecuted instantiation: ebsttree.c:eb_prev Unexecuted instantiation: event_hdl.c:eb_prev Unexecuted instantiation: extcheck.c:eb_prev Unexecuted instantiation: fcgi-app.c:eb_prev Unexecuted instantiation: fix.c:eb_prev Unexecuted instantiation: guid.c:eb_prev Unexecuted instantiation: h1.c:eb_prev Unexecuted instantiation: http_fetch.c:eb_prev Unexecuted instantiation: mqtt.c:eb_prev Unexecuted instantiation: mux_spop.c:eb_prev Unexecuted instantiation: pattern.c:eb_prev Unexecuted instantiation: payload.c:eb_prev Unexecuted instantiation: proto_tcp.c:eb_prev Unexecuted instantiation: shctx.c:eb_prev Unexecuted instantiation: stats-file.c:eb_prev Unexecuted instantiation: stats-json.c:eb_prev Unexecuted instantiation: stats-proxy.c:eb_prev Unexecuted instantiation: flt_spoe.c:eb_prev Unexecuted instantiation: h1_htx.c:eb_prev Unexecuted instantiation: lru.c:eb_prev |
548 | | |
549 | | /* Return next leaf node after an existing leaf node, or NULL if none. */ |
550 | | static inline struct eb_node *eb_next(struct eb_node *node) |
551 | 0 | { |
552 | 0 | eb_troot_t *t = node->leaf_p; |
553 | |
|
554 | 0 | while (eb_gettag(t) != EB_LEFT) |
555 | | /* Walking up from right branch, so we cannot be below root */ |
556 | 0 | t = (eb_root_to_node(eb_untag(t, EB_RGHT)))->node_p; |
557 | | |
558 | | /* Note that <t> cannot be NULL at this stage */ |
559 | 0 | t = (eb_untag(t, EB_LEFT))->b[EB_RGHT]; |
560 | 0 | if (eb_clrtag(t) == NULL) |
561 | 0 | return NULL; |
562 | 0 | return eb_walk_down(t, EB_LEFT); |
563 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_next Unexecuted instantiation: fuzz_cfg_parser.c:eb_next Unexecuted instantiation: cfgparse.c:eb_next Unexecuted instantiation: chunk.c:eb_next Unexecuted instantiation: cli.c:eb_next Unexecuted instantiation: clock.c:eb_next Unexecuted instantiation: connection.c:eb_next Unexecuted instantiation: debug.c:eb_next Unexecuted instantiation: dynbuf.c:eb_next Unexecuted instantiation: eb32tree.c:eb_next Unexecuted instantiation: ebtree.c:eb_next Unexecuted instantiation: errors.c:eb_next Unexecuted instantiation: fd.c:eb_next Unexecuted instantiation: filters.c:eb_next Unexecuted instantiation: flt_http_comp.c:eb_next Unexecuted instantiation: freq_ctr.c:eb_next Unexecuted instantiation: frontend.c:eb_next Unexecuted instantiation: haproxy.c:eb_next Unexecuted instantiation: http.c:eb_next Unexecuted instantiation: http_ana.c:eb_next Unexecuted instantiation: http_ext.c:eb_next Unexecuted instantiation: http_htx.c:eb_next Unexecuted instantiation: http_rules.c:eb_next Unexecuted instantiation: lb_chash.c:eb_next Unexecuted instantiation: lb_fas.c:eb_next Unexecuted instantiation: lb_fwlc.c:eb_next Unexecuted instantiation: lb_fwrr.c:eb_next Unexecuted instantiation: lb_map.c:eb_next Unexecuted instantiation: lb_ss.c:eb_next Unexecuted instantiation: limits.c:eb_next Unexecuted instantiation: listener.c:eb_next Unexecuted instantiation: log.c:eb_next Unexecuted instantiation: mailers.c:eb_next Unexecuted instantiation: mworker.c:eb_next Unexecuted instantiation: peers.c:eb_next Unexecuted instantiation: pool.c:eb_next Unexecuted instantiation: proto_rhttp.c:eb_next Unexecuted instantiation: proto_sockpair.c:eb_next Unexecuted instantiation: protocol.c:eb_next Unexecuted instantiation: proxy.c:eb_next Unexecuted instantiation: queue.c:eb_next Unexecuted instantiation: regex.c:eb_next Unexecuted instantiation: resolvers.c:eb_next Unexecuted instantiation: ring.c:eb_next Unexecuted instantiation: sample.c:eb_next Unexecuted instantiation: server.c:eb_next Unexecuted instantiation: session.c:eb_next Unexecuted instantiation: signal.c:eb_next Unexecuted instantiation: sink.c:eb_next Unexecuted instantiation: sock.c:eb_next Unexecuted instantiation: sock_inet.c:eb_next Unexecuted instantiation: stats-html.c:eb_next Unexecuted instantiation: stats.c:eb_next Unexecuted instantiation: stconn.c:eb_next Unexecuted instantiation: stick_table.c:eb_next Unexecuted instantiation: stream.c:eb_next Unexecuted instantiation: systemd.c:eb_next Unexecuted instantiation: task.c:eb_next Unexecuted instantiation: tcp_rules.c:eb_next Unexecuted instantiation: tcpcheck.c:eb_next Unexecuted instantiation: thread.c:eb_next Unexecuted instantiation: tools.c:eb_next Unexecuted instantiation: trace.c:eb_next Unexecuted instantiation: uri_auth.c:eb_next Unexecuted instantiation: vars.c:eb_next Unexecuted instantiation: acl.c:eb_next Unexecuted instantiation: action.c:eb_next Unexecuted instantiation: activity.c:eb_next Unexecuted instantiation: applet.c:eb_next Unexecuted instantiation: arg.c:eb_next Unexecuted instantiation: backend.c:eb_next Unexecuted instantiation: cache.c:eb_next Unexecuted instantiation: cebu64_tree.c:eb_next Unexecuted instantiation: cebus_tree.c:eb_next Unexecuted instantiation: cfgcond.c:eb_next Unexecuted instantiation: cfgparse-global.c:eb_next Unexecuted instantiation: cfgparse-listen.c:eb_next Unexecuted instantiation: channel.c:eb_next Unexecuted instantiation: check.c:eb_next Unexecuted instantiation: compression.c:eb_next Unexecuted instantiation: dgram.c:eb_next Unexecuted instantiation: dict.c:eb_next Unexecuted instantiation: dns.c:eb_next Unexecuted instantiation: dns_ring.c:eb_next Unexecuted instantiation: eb64tree.c:eb_next Unexecuted instantiation: ebimtree.c:eb_next Unexecuted instantiation: ebistree.c:eb_next Unexecuted instantiation: ebmbtree.c:eb_next Unexecuted instantiation: ebsttree.c:eb_next Unexecuted instantiation: event_hdl.c:eb_next Unexecuted instantiation: extcheck.c:eb_next Unexecuted instantiation: fcgi-app.c:eb_next Unexecuted instantiation: fix.c:eb_next Unexecuted instantiation: guid.c:eb_next Unexecuted instantiation: h1.c:eb_next Unexecuted instantiation: http_fetch.c:eb_next Unexecuted instantiation: mqtt.c:eb_next Unexecuted instantiation: mux_spop.c:eb_next Unexecuted instantiation: pattern.c:eb_next Unexecuted instantiation: payload.c:eb_next Unexecuted instantiation: proto_tcp.c:eb_next Unexecuted instantiation: shctx.c:eb_next Unexecuted instantiation: stats-file.c:eb_next Unexecuted instantiation: stats-json.c:eb_next Unexecuted instantiation: stats-proxy.c:eb_next Unexecuted instantiation: flt_spoe.c:eb_next Unexecuted instantiation: h1_htx.c:eb_next Unexecuted instantiation: lru.c:eb_next |
564 | | |
565 | | /* Return previous leaf node within a duplicate sub-tree, or NULL if none. */ |
566 | | static inline struct eb_node *eb_prev_dup(struct eb_node *node) |
567 | 0 | { |
568 | 0 | eb_troot_t *t = node->leaf_p; |
569 | |
|
570 | 0 | while (eb_gettag(t) == EB_LEFT) { |
571 | | /* Walking up from left branch. We must ensure that we never |
572 | | * walk beyond root. |
573 | | */ |
574 | 0 | if (unlikely(eb_clrtag((eb_untag(t, EB_LEFT))->b[EB_RGHT]) == NULL)) |
575 | 0 | return NULL; |
576 | | /* if the current node leaves a dup tree, quit */ |
577 | 0 | if ((eb_root_to_node(eb_untag(t, EB_LEFT)))->bit >= 0) |
578 | 0 | return NULL; |
579 | 0 | t = (eb_root_to_node(eb_untag(t, EB_LEFT)))->node_p; |
580 | 0 | } |
581 | | /* Note that <t> cannot be NULL at this stage */ |
582 | 0 | if ((eb_root_to_node(eb_untag(t, EB_RGHT)))->bit >= 0) |
583 | 0 | return NULL; |
584 | 0 | t = (eb_untag(t, EB_RGHT))->b[EB_LEFT]; |
585 | 0 | return eb_walk_down(t, EB_RGHT); |
586 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_prev_dup Unexecuted instantiation: fuzz_cfg_parser.c:eb_prev_dup Unexecuted instantiation: cfgparse.c:eb_prev_dup Unexecuted instantiation: chunk.c:eb_prev_dup Unexecuted instantiation: cli.c:eb_prev_dup Unexecuted instantiation: clock.c:eb_prev_dup Unexecuted instantiation: connection.c:eb_prev_dup Unexecuted instantiation: debug.c:eb_prev_dup Unexecuted instantiation: dynbuf.c:eb_prev_dup Unexecuted instantiation: eb32tree.c:eb_prev_dup Unexecuted instantiation: ebtree.c:eb_prev_dup Unexecuted instantiation: errors.c:eb_prev_dup Unexecuted instantiation: fd.c:eb_prev_dup Unexecuted instantiation: filters.c:eb_prev_dup Unexecuted instantiation: flt_http_comp.c:eb_prev_dup Unexecuted instantiation: freq_ctr.c:eb_prev_dup Unexecuted instantiation: frontend.c:eb_prev_dup Unexecuted instantiation: haproxy.c:eb_prev_dup Unexecuted instantiation: http.c:eb_prev_dup Unexecuted instantiation: http_ana.c:eb_prev_dup Unexecuted instantiation: http_ext.c:eb_prev_dup Unexecuted instantiation: http_htx.c:eb_prev_dup Unexecuted instantiation: http_rules.c:eb_prev_dup Unexecuted instantiation: lb_chash.c:eb_prev_dup Unexecuted instantiation: lb_fas.c:eb_prev_dup Unexecuted instantiation: lb_fwlc.c:eb_prev_dup Unexecuted instantiation: lb_fwrr.c:eb_prev_dup Unexecuted instantiation: lb_map.c:eb_prev_dup Unexecuted instantiation: lb_ss.c:eb_prev_dup Unexecuted instantiation: limits.c:eb_prev_dup Unexecuted instantiation: listener.c:eb_prev_dup Unexecuted instantiation: log.c:eb_prev_dup Unexecuted instantiation: mailers.c:eb_prev_dup Unexecuted instantiation: mworker.c:eb_prev_dup Unexecuted instantiation: peers.c:eb_prev_dup Unexecuted instantiation: pool.c:eb_prev_dup Unexecuted instantiation: proto_rhttp.c:eb_prev_dup Unexecuted instantiation: proto_sockpair.c:eb_prev_dup Unexecuted instantiation: protocol.c:eb_prev_dup Unexecuted instantiation: proxy.c:eb_prev_dup Unexecuted instantiation: queue.c:eb_prev_dup Unexecuted instantiation: regex.c:eb_prev_dup Unexecuted instantiation: resolvers.c:eb_prev_dup Unexecuted instantiation: ring.c:eb_prev_dup Unexecuted instantiation: sample.c:eb_prev_dup Unexecuted instantiation: server.c:eb_prev_dup Unexecuted instantiation: session.c:eb_prev_dup Unexecuted instantiation: signal.c:eb_prev_dup Unexecuted instantiation: sink.c:eb_prev_dup Unexecuted instantiation: sock.c:eb_prev_dup Unexecuted instantiation: sock_inet.c:eb_prev_dup Unexecuted instantiation: stats-html.c:eb_prev_dup Unexecuted instantiation: stats.c:eb_prev_dup Unexecuted instantiation: stconn.c:eb_prev_dup Unexecuted instantiation: stick_table.c:eb_prev_dup Unexecuted instantiation: stream.c:eb_prev_dup Unexecuted instantiation: systemd.c:eb_prev_dup Unexecuted instantiation: task.c:eb_prev_dup Unexecuted instantiation: tcp_rules.c:eb_prev_dup Unexecuted instantiation: tcpcheck.c:eb_prev_dup Unexecuted instantiation: thread.c:eb_prev_dup Unexecuted instantiation: tools.c:eb_prev_dup Unexecuted instantiation: trace.c:eb_prev_dup Unexecuted instantiation: uri_auth.c:eb_prev_dup Unexecuted instantiation: vars.c:eb_prev_dup Unexecuted instantiation: acl.c:eb_prev_dup Unexecuted instantiation: action.c:eb_prev_dup Unexecuted instantiation: activity.c:eb_prev_dup Unexecuted instantiation: applet.c:eb_prev_dup Unexecuted instantiation: arg.c:eb_prev_dup Unexecuted instantiation: backend.c:eb_prev_dup Unexecuted instantiation: cache.c:eb_prev_dup Unexecuted instantiation: cebu64_tree.c:eb_prev_dup Unexecuted instantiation: cebus_tree.c:eb_prev_dup Unexecuted instantiation: cfgcond.c:eb_prev_dup Unexecuted instantiation: cfgparse-global.c:eb_prev_dup Unexecuted instantiation: cfgparse-listen.c:eb_prev_dup Unexecuted instantiation: channel.c:eb_prev_dup Unexecuted instantiation: check.c:eb_prev_dup Unexecuted instantiation: compression.c:eb_prev_dup Unexecuted instantiation: dgram.c:eb_prev_dup Unexecuted instantiation: dict.c:eb_prev_dup Unexecuted instantiation: dns.c:eb_prev_dup Unexecuted instantiation: dns_ring.c:eb_prev_dup Unexecuted instantiation: eb64tree.c:eb_prev_dup Unexecuted instantiation: ebimtree.c:eb_prev_dup Unexecuted instantiation: ebistree.c:eb_prev_dup Unexecuted instantiation: ebmbtree.c:eb_prev_dup Unexecuted instantiation: ebsttree.c:eb_prev_dup Unexecuted instantiation: event_hdl.c:eb_prev_dup Unexecuted instantiation: extcheck.c:eb_prev_dup Unexecuted instantiation: fcgi-app.c:eb_prev_dup Unexecuted instantiation: fix.c:eb_prev_dup Unexecuted instantiation: guid.c:eb_prev_dup Unexecuted instantiation: h1.c:eb_prev_dup Unexecuted instantiation: http_fetch.c:eb_prev_dup Unexecuted instantiation: mqtt.c:eb_prev_dup Unexecuted instantiation: mux_spop.c:eb_prev_dup Unexecuted instantiation: pattern.c:eb_prev_dup Unexecuted instantiation: payload.c:eb_prev_dup Unexecuted instantiation: proto_tcp.c:eb_prev_dup Unexecuted instantiation: shctx.c:eb_prev_dup Unexecuted instantiation: stats-file.c:eb_prev_dup Unexecuted instantiation: stats-json.c:eb_prev_dup Unexecuted instantiation: stats-proxy.c:eb_prev_dup Unexecuted instantiation: flt_spoe.c:eb_prev_dup Unexecuted instantiation: h1_htx.c:eb_prev_dup Unexecuted instantiation: lru.c:eb_prev_dup |
587 | | |
588 | | /* Return next leaf node within a duplicate sub-tree, or NULL if none. */ |
589 | | static inline struct eb_node *eb_next_dup(struct eb_node *node) |
590 | 0 | { |
591 | 0 | eb_troot_t *t = node->leaf_p; |
592 | |
|
593 | 0 | while (eb_gettag(t) != EB_LEFT) { |
594 | | /* Walking up from right branch, so we cannot be below root */ |
595 | | /* if the current node leaves a dup tree, quit */ |
596 | 0 | if ((eb_root_to_node(eb_untag(t, EB_RGHT)))->bit >= 0) |
597 | 0 | return NULL; |
598 | 0 | t = (eb_root_to_node(eb_untag(t, EB_RGHT)))->node_p; |
599 | 0 | } |
600 | | |
601 | | /* Note that <t> cannot be NULL at this stage. If our leaf is directly |
602 | | * under the root, we must not try to cast the leaf_p into a eb_node* |
603 | | * since it is a pointer to an eb_root. |
604 | | */ |
605 | 0 | if (eb_clrtag((eb_untag(t, EB_LEFT))->b[EB_RGHT]) == NULL) |
606 | 0 | return NULL; |
607 | | |
608 | 0 | if ((eb_root_to_node(eb_untag(t, EB_LEFT)))->bit >= 0) |
609 | 0 | return NULL; |
610 | 0 | t = (eb_untag(t, EB_LEFT))->b[EB_RGHT]; |
611 | 0 | return eb_walk_down(t, EB_LEFT); |
612 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_next_dup Unexecuted instantiation: fuzz_cfg_parser.c:eb_next_dup Unexecuted instantiation: cfgparse.c:eb_next_dup Unexecuted instantiation: chunk.c:eb_next_dup Unexecuted instantiation: cli.c:eb_next_dup Unexecuted instantiation: clock.c:eb_next_dup Unexecuted instantiation: connection.c:eb_next_dup Unexecuted instantiation: debug.c:eb_next_dup Unexecuted instantiation: dynbuf.c:eb_next_dup Unexecuted instantiation: eb32tree.c:eb_next_dup Unexecuted instantiation: ebtree.c:eb_next_dup Unexecuted instantiation: errors.c:eb_next_dup Unexecuted instantiation: fd.c:eb_next_dup Unexecuted instantiation: filters.c:eb_next_dup Unexecuted instantiation: flt_http_comp.c:eb_next_dup Unexecuted instantiation: freq_ctr.c:eb_next_dup Unexecuted instantiation: frontend.c:eb_next_dup Unexecuted instantiation: haproxy.c:eb_next_dup Unexecuted instantiation: http.c:eb_next_dup Unexecuted instantiation: http_ana.c:eb_next_dup Unexecuted instantiation: http_ext.c:eb_next_dup Unexecuted instantiation: http_htx.c:eb_next_dup Unexecuted instantiation: http_rules.c:eb_next_dup Unexecuted instantiation: lb_chash.c:eb_next_dup Unexecuted instantiation: lb_fas.c:eb_next_dup Unexecuted instantiation: lb_fwlc.c:eb_next_dup Unexecuted instantiation: lb_fwrr.c:eb_next_dup Unexecuted instantiation: lb_map.c:eb_next_dup Unexecuted instantiation: lb_ss.c:eb_next_dup Unexecuted instantiation: limits.c:eb_next_dup Unexecuted instantiation: listener.c:eb_next_dup Unexecuted instantiation: log.c:eb_next_dup Unexecuted instantiation: mailers.c:eb_next_dup Unexecuted instantiation: mworker.c:eb_next_dup Unexecuted instantiation: peers.c:eb_next_dup Unexecuted instantiation: pool.c:eb_next_dup Unexecuted instantiation: proto_rhttp.c:eb_next_dup Unexecuted instantiation: proto_sockpair.c:eb_next_dup Unexecuted instantiation: protocol.c:eb_next_dup Unexecuted instantiation: proxy.c:eb_next_dup Unexecuted instantiation: queue.c:eb_next_dup Unexecuted instantiation: regex.c:eb_next_dup Unexecuted instantiation: resolvers.c:eb_next_dup Unexecuted instantiation: ring.c:eb_next_dup Unexecuted instantiation: sample.c:eb_next_dup Unexecuted instantiation: server.c:eb_next_dup Unexecuted instantiation: session.c:eb_next_dup Unexecuted instantiation: signal.c:eb_next_dup Unexecuted instantiation: sink.c:eb_next_dup Unexecuted instantiation: sock.c:eb_next_dup Unexecuted instantiation: sock_inet.c:eb_next_dup Unexecuted instantiation: stats-html.c:eb_next_dup Unexecuted instantiation: stats.c:eb_next_dup Unexecuted instantiation: stconn.c:eb_next_dup Unexecuted instantiation: stick_table.c:eb_next_dup Unexecuted instantiation: stream.c:eb_next_dup Unexecuted instantiation: systemd.c:eb_next_dup Unexecuted instantiation: task.c:eb_next_dup Unexecuted instantiation: tcp_rules.c:eb_next_dup Unexecuted instantiation: tcpcheck.c:eb_next_dup Unexecuted instantiation: thread.c:eb_next_dup Unexecuted instantiation: tools.c:eb_next_dup Unexecuted instantiation: trace.c:eb_next_dup Unexecuted instantiation: uri_auth.c:eb_next_dup Unexecuted instantiation: vars.c:eb_next_dup Unexecuted instantiation: acl.c:eb_next_dup Unexecuted instantiation: action.c:eb_next_dup Unexecuted instantiation: activity.c:eb_next_dup Unexecuted instantiation: applet.c:eb_next_dup Unexecuted instantiation: arg.c:eb_next_dup Unexecuted instantiation: backend.c:eb_next_dup Unexecuted instantiation: cache.c:eb_next_dup Unexecuted instantiation: cebu64_tree.c:eb_next_dup Unexecuted instantiation: cebus_tree.c:eb_next_dup Unexecuted instantiation: cfgcond.c:eb_next_dup Unexecuted instantiation: cfgparse-global.c:eb_next_dup Unexecuted instantiation: cfgparse-listen.c:eb_next_dup Unexecuted instantiation: channel.c:eb_next_dup Unexecuted instantiation: check.c:eb_next_dup Unexecuted instantiation: compression.c:eb_next_dup Unexecuted instantiation: dgram.c:eb_next_dup Unexecuted instantiation: dict.c:eb_next_dup Unexecuted instantiation: dns.c:eb_next_dup Unexecuted instantiation: dns_ring.c:eb_next_dup Unexecuted instantiation: eb64tree.c:eb_next_dup Unexecuted instantiation: ebimtree.c:eb_next_dup Unexecuted instantiation: ebistree.c:eb_next_dup Unexecuted instantiation: ebmbtree.c:eb_next_dup Unexecuted instantiation: ebsttree.c:eb_next_dup Unexecuted instantiation: event_hdl.c:eb_next_dup Unexecuted instantiation: extcheck.c:eb_next_dup Unexecuted instantiation: fcgi-app.c:eb_next_dup Unexecuted instantiation: fix.c:eb_next_dup Unexecuted instantiation: guid.c:eb_next_dup Unexecuted instantiation: h1.c:eb_next_dup Unexecuted instantiation: http_fetch.c:eb_next_dup Unexecuted instantiation: mqtt.c:eb_next_dup Unexecuted instantiation: mux_spop.c:eb_next_dup Unexecuted instantiation: pattern.c:eb_next_dup Unexecuted instantiation: payload.c:eb_next_dup Unexecuted instantiation: proto_tcp.c:eb_next_dup Unexecuted instantiation: shctx.c:eb_next_dup Unexecuted instantiation: stats-file.c:eb_next_dup Unexecuted instantiation: stats-json.c:eb_next_dup Unexecuted instantiation: stats-proxy.c:eb_next_dup Unexecuted instantiation: flt_spoe.c:eb_next_dup Unexecuted instantiation: h1_htx.c:eb_next_dup Unexecuted instantiation: lru.c:eb_next_dup |
613 | | |
614 | | /* Return previous leaf node before an existing leaf node, skipping duplicates, |
615 | | * or NULL if none. */ |
616 | | static inline struct eb_node *eb_prev_unique(struct eb_node *node) |
617 | 0 | { |
618 | 0 | eb_troot_t *t = node->leaf_p; |
619 | 0 |
|
620 | 0 | while (1) { |
621 | 0 | if (eb_gettag(t) != EB_LEFT) { |
622 | 0 | node = eb_root_to_node(eb_untag(t, EB_RGHT)); |
623 | 0 | /* if we're right and not in duplicates, stop here */ |
624 | 0 | if (node->bit >= 0) |
625 | 0 | break; |
626 | 0 | t = node->node_p; |
627 | 0 | } |
628 | 0 | else { |
629 | 0 | /* Walking up from left branch. We must ensure that we never |
630 | 0 | * walk beyond root. |
631 | 0 | */ |
632 | 0 | if (unlikely(eb_clrtag((eb_untag(t, EB_LEFT))->b[EB_RGHT]) == NULL)) |
633 | 0 | return NULL; |
634 | 0 | t = (eb_root_to_node(eb_untag(t, EB_LEFT)))->node_p; |
635 | 0 | } |
636 | 0 | } |
637 | 0 | /* Note that <t> cannot be NULL at this stage */ |
638 | 0 | t = (eb_untag(t, EB_RGHT))->b[EB_LEFT]; |
639 | 0 | return eb_walk_down(t, EB_RGHT); |
640 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_prev_unique Unexecuted instantiation: fuzz_cfg_parser.c:eb_prev_unique Unexecuted instantiation: cfgparse.c:eb_prev_unique Unexecuted instantiation: chunk.c:eb_prev_unique Unexecuted instantiation: cli.c:eb_prev_unique Unexecuted instantiation: clock.c:eb_prev_unique Unexecuted instantiation: connection.c:eb_prev_unique Unexecuted instantiation: debug.c:eb_prev_unique Unexecuted instantiation: dynbuf.c:eb_prev_unique Unexecuted instantiation: eb32tree.c:eb_prev_unique Unexecuted instantiation: ebtree.c:eb_prev_unique Unexecuted instantiation: errors.c:eb_prev_unique Unexecuted instantiation: fd.c:eb_prev_unique Unexecuted instantiation: filters.c:eb_prev_unique Unexecuted instantiation: flt_http_comp.c:eb_prev_unique Unexecuted instantiation: freq_ctr.c:eb_prev_unique Unexecuted instantiation: frontend.c:eb_prev_unique Unexecuted instantiation: haproxy.c:eb_prev_unique Unexecuted instantiation: http.c:eb_prev_unique Unexecuted instantiation: http_ana.c:eb_prev_unique Unexecuted instantiation: http_ext.c:eb_prev_unique Unexecuted instantiation: http_htx.c:eb_prev_unique Unexecuted instantiation: http_rules.c:eb_prev_unique Unexecuted instantiation: lb_chash.c:eb_prev_unique Unexecuted instantiation: lb_fas.c:eb_prev_unique Unexecuted instantiation: lb_fwlc.c:eb_prev_unique Unexecuted instantiation: lb_fwrr.c:eb_prev_unique Unexecuted instantiation: lb_map.c:eb_prev_unique Unexecuted instantiation: lb_ss.c:eb_prev_unique Unexecuted instantiation: limits.c:eb_prev_unique Unexecuted instantiation: listener.c:eb_prev_unique Unexecuted instantiation: log.c:eb_prev_unique Unexecuted instantiation: mailers.c:eb_prev_unique Unexecuted instantiation: mworker.c:eb_prev_unique Unexecuted instantiation: peers.c:eb_prev_unique Unexecuted instantiation: pool.c:eb_prev_unique Unexecuted instantiation: proto_rhttp.c:eb_prev_unique Unexecuted instantiation: proto_sockpair.c:eb_prev_unique Unexecuted instantiation: protocol.c:eb_prev_unique Unexecuted instantiation: proxy.c:eb_prev_unique Unexecuted instantiation: queue.c:eb_prev_unique Unexecuted instantiation: regex.c:eb_prev_unique Unexecuted instantiation: resolvers.c:eb_prev_unique Unexecuted instantiation: ring.c:eb_prev_unique Unexecuted instantiation: sample.c:eb_prev_unique Unexecuted instantiation: server.c:eb_prev_unique Unexecuted instantiation: session.c:eb_prev_unique Unexecuted instantiation: signal.c:eb_prev_unique Unexecuted instantiation: sink.c:eb_prev_unique Unexecuted instantiation: sock.c:eb_prev_unique Unexecuted instantiation: sock_inet.c:eb_prev_unique Unexecuted instantiation: stats-html.c:eb_prev_unique Unexecuted instantiation: stats.c:eb_prev_unique Unexecuted instantiation: stconn.c:eb_prev_unique Unexecuted instantiation: stick_table.c:eb_prev_unique Unexecuted instantiation: stream.c:eb_prev_unique Unexecuted instantiation: systemd.c:eb_prev_unique Unexecuted instantiation: task.c:eb_prev_unique Unexecuted instantiation: tcp_rules.c:eb_prev_unique Unexecuted instantiation: tcpcheck.c:eb_prev_unique Unexecuted instantiation: thread.c:eb_prev_unique Unexecuted instantiation: tools.c:eb_prev_unique Unexecuted instantiation: trace.c:eb_prev_unique Unexecuted instantiation: uri_auth.c:eb_prev_unique Unexecuted instantiation: vars.c:eb_prev_unique Unexecuted instantiation: acl.c:eb_prev_unique Unexecuted instantiation: action.c:eb_prev_unique Unexecuted instantiation: activity.c:eb_prev_unique Unexecuted instantiation: applet.c:eb_prev_unique Unexecuted instantiation: arg.c:eb_prev_unique Unexecuted instantiation: backend.c:eb_prev_unique Unexecuted instantiation: cache.c:eb_prev_unique Unexecuted instantiation: cebu64_tree.c:eb_prev_unique Unexecuted instantiation: cebus_tree.c:eb_prev_unique Unexecuted instantiation: cfgcond.c:eb_prev_unique Unexecuted instantiation: cfgparse-global.c:eb_prev_unique Unexecuted instantiation: cfgparse-listen.c:eb_prev_unique Unexecuted instantiation: channel.c:eb_prev_unique Unexecuted instantiation: check.c:eb_prev_unique Unexecuted instantiation: compression.c:eb_prev_unique Unexecuted instantiation: dgram.c:eb_prev_unique Unexecuted instantiation: dict.c:eb_prev_unique Unexecuted instantiation: dns.c:eb_prev_unique Unexecuted instantiation: dns_ring.c:eb_prev_unique Unexecuted instantiation: eb64tree.c:eb_prev_unique Unexecuted instantiation: ebimtree.c:eb_prev_unique Unexecuted instantiation: ebistree.c:eb_prev_unique Unexecuted instantiation: ebmbtree.c:eb_prev_unique Unexecuted instantiation: ebsttree.c:eb_prev_unique Unexecuted instantiation: event_hdl.c:eb_prev_unique Unexecuted instantiation: extcheck.c:eb_prev_unique Unexecuted instantiation: fcgi-app.c:eb_prev_unique Unexecuted instantiation: fix.c:eb_prev_unique Unexecuted instantiation: guid.c:eb_prev_unique Unexecuted instantiation: h1.c:eb_prev_unique Unexecuted instantiation: http_fetch.c:eb_prev_unique Unexecuted instantiation: mqtt.c:eb_prev_unique Unexecuted instantiation: mux_spop.c:eb_prev_unique Unexecuted instantiation: pattern.c:eb_prev_unique Unexecuted instantiation: payload.c:eb_prev_unique Unexecuted instantiation: proto_tcp.c:eb_prev_unique Unexecuted instantiation: shctx.c:eb_prev_unique Unexecuted instantiation: stats-file.c:eb_prev_unique Unexecuted instantiation: stats-json.c:eb_prev_unique Unexecuted instantiation: stats-proxy.c:eb_prev_unique Unexecuted instantiation: flt_spoe.c:eb_prev_unique Unexecuted instantiation: h1_htx.c:eb_prev_unique Unexecuted instantiation: lru.c:eb_prev_unique |
641 | | |
642 | | /* Return next leaf node after an existing leaf node, skipping duplicates, or |
643 | | * NULL if none. |
644 | | */ |
645 | | static inline struct eb_node *eb_next_unique(struct eb_node *node) |
646 | 0 | { |
647 | 0 | eb_troot_t *t = node->leaf_p; |
648 | 0 |
|
649 | 0 | while (1) { |
650 | 0 | if (eb_gettag(t) == EB_LEFT) { |
651 | 0 | if (unlikely(eb_clrtag((eb_untag(t, EB_LEFT))->b[EB_RGHT]) == NULL)) |
652 | 0 | return NULL; /* we reached root */ |
653 | 0 | node = eb_root_to_node(eb_untag(t, EB_LEFT)); |
654 | 0 | /* if we're left and not in duplicates, stop here */ |
655 | 0 | if (node->bit >= 0) |
656 | 0 | break; |
657 | 0 | t = node->node_p; |
658 | 0 | } |
659 | 0 | else { |
660 | 0 | /* Walking up from right branch, so we cannot be below root */ |
661 | 0 | t = (eb_root_to_node(eb_untag(t, EB_RGHT)))->node_p; |
662 | 0 | } |
663 | 0 | } |
664 | 0 |
|
665 | 0 | /* Note that <t> cannot be NULL at this stage */ |
666 | 0 | t = (eb_untag(t, EB_LEFT))->b[EB_RGHT]; |
667 | 0 | if (eb_clrtag(t) == NULL) |
668 | 0 | return NULL; |
669 | 0 | return eb_walk_down(t, EB_LEFT); |
670 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_next_unique Unexecuted instantiation: fuzz_cfg_parser.c:eb_next_unique Unexecuted instantiation: cfgparse.c:eb_next_unique Unexecuted instantiation: chunk.c:eb_next_unique Unexecuted instantiation: cli.c:eb_next_unique Unexecuted instantiation: clock.c:eb_next_unique Unexecuted instantiation: connection.c:eb_next_unique Unexecuted instantiation: debug.c:eb_next_unique Unexecuted instantiation: dynbuf.c:eb_next_unique Unexecuted instantiation: eb32tree.c:eb_next_unique Unexecuted instantiation: ebtree.c:eb_next_unique Unexecuted instantiation: errors.c:eb_next_unique Unexecuted instantiation: fd.c:eb_next_unique Unexecuted instantiation: filters.c:eb_next_unique Unexecuted instantiation: flt_http_comp.c:eb_next_unique Unexecuted instantiation: freq_ctr.c:eb_next_unique Unexecuted instantiation: frontend.c:eb_next_unique Unexecuted instantiation: haproxy.c:eb_next_unique Unexecuted instantiation: http.c:eb_next_unique Unexecuted instantiation: http_ana.c:eb_next_unique Unexecuted instantiation: http_ext.c:eb_next_unique Unexecuted instantiation: http_htx.c:eb_next_unique Unexecuted instantiation: http_rules.c:eb_next_unique Unexecuted instantiation: lb_chash.c:eb_next_unique Unexecuted instantiation: lb_fas.c:eb_next_unique Unexecuted instantiation: lb_fwlc.c:eb_next_unique Unexecuted instantiation: lb_fwrr.c:eb_next_unique Unexecuted instantiation: lb_map.c:eb_next_unique Unexecuted instantiation: lb_ss.c:eb_next_unique Unexecuted instantiation: limits.c:eb_next_unique Unexecuted instantiation: listener.c:eb_next_unique Unexecuted instantiation: log.c:eb_next_unique Unexecuted instantiation: mailers.c:eb_next_unique Unexecuted instantiation: mworker.c:eb_next_unique Unexecuted instantiation: peers.c:eb_next_unique Unexecuted instantiation: pool.c:eb_next_unique Unexecuted instantiation: proto_rhttp.c:eb_next_unique Unexecuted instantiation: proto_sockpair.c:eb_next_unique Unexecuted instantiation: protocol.c:eb_next_unique Unexecuted instantiation: proxy.c:eb_next_unique Unexecuted instantiation: queue.c:eb_next_unique Unexecuted instantiation: regex.c:eb_next_unique Unexecuted instantiation: resolvers.c:eb_next_unique Unexecuted instantiation: ring.c:eb_next_unique Unexecuted instantiation: sample.c:eb_next_unique Unexecuted instantiation: server.c:eb_next_unique Unexecuted instantiation: session.c:eb_next_unique Unexecuted instantiation: signal.c:eb_next_unique Unexecuted instantiation: sink.c:eb_next_unique Unexecuted instantiation: sock.c:eb_next_unique Unexecuted instantiation: sock_inet.c:eb_next_unique Unexecuted instantiation: stats-html.c:eb_next_unique Unexecuted instantiation: stats.c:eb_next_unique Unexecuted instantiation: stconn.c:eb_next_unique Unexecuted instantiation: stick_table.c:eb_next_unique Unexecuted instantiation: stream.c:eb_next_unique Unexecuted instantiation: systemd.c:eb_next_unique Unexecuted instantiation: task.c:eb_next_unique Unexecuted instantiation: tcp_rules.c:eb_next_unique Unexecuted instantiation: tcpcheck.c:eb_next_unique Unexecuted instantiation: thread.c:eb_next_unique Unexecuted instantiation: tools.c:eb_next_unique Unexecuted instantiation: trace.c:eb_next_unique Unexecuted instantiation: uri_auth.c:eb_next_unique Unexecuted instantiation: vars.c:eb_next_unique Unexecuted instantiation: acl.c:eb_next_unique Unexecuted instantiation: action.c:eb_next_unique Unexecuted instantiation: activity.c:eb_next_unique Unexecuted instantiation: applet.c:eb_next_unique Unexecuted instantiation: arg.c:eb_next_unique Unexecuted instantiation: backend.c:eb_next_unique Unexecuted instantiation: cache.c:eb_next_unique Unexecuted instantiation: cebu64_tree.c:eb_next_unique Unexecuted instantiation: cebus_tree.c:eb_next_unique Unexecuted instantiation: cfgcond.c:eb_next_unique Unexecuted instantiation: cfgparse-global.c:eb_next_unique Unexecuted instantiation: cfgparse-listen.c:eb_next_unique Unexecuted instantiation: channel.c:eb_next_unique Unexecuted instantiation: check.c:eb_next_unique Unexecuted instantiation: compression.c:eb_next_unique Unexecuted instantiation: dgram.c:eb_next_unique Unexecuted instantiation: dict.c:eb_next_unique Unexecuted instantiation: dns.c:eb_next_unique Unexecuted instantiation: dns_ring.c:eb_next_unique Unexecuted instantiation: eb64tree.c:eb_next_unique Unexecuted instantiation: ebimtree.c:eb_next_unique Unexecuted instantiation: ebistree.c:eb_next_unique Unexecuted instantiation: ebmbtree.c:eb_next_unique Unexecuted instantiation: ebsttree.c:eb_next_unique Unexecuted instantiation: event_hdl.c:eb_next_unique Unexecuted instantiation: extcheck.c:eb_next_unique Unexecuted instantiation: fcgi-app.c:eb_next_unique Unexecuted instantiation: fix.c:eb_next_unique Unexecuted instantiation: guid.c:eb_next_unique Unexecuted instantiation: h1.c:eb_next_unique Unexecuted instantiation: http_fetch.c:eb_next_unique Unexecuted instantiation: mqtt.c:eb_next_unique Unexecuted instantiation: mux_spop.c:eb_next_unique Unexecuted instantiation: pattern.c:eb_next_unique Unexecuted instantiation: payload.c:eb_next_unique Unexecuted instantiation: proto_tcp.c:eb_next_unique Unexecuted instantiation: shctx.c:eb_next_unique Unexecuted instantiation: stats-file.c:eb_next_unique Unexecuted instantiation: stats-json.c:eb_next_unique Unexecuted instantiation: stats-proxy.c:eb_next_unique Unexecuted instantiation: flt_spoe.c:eb_next_unique Unexecuted instantiation: h1_htx.c:eb_next_unique Unexecuted instantiation: lru.c:eb_next_unique |
671 | | |
672 | | |
673 | | /* Removes a leaf node from the tree if it was still in it. Marks the node |
674 | | * as unlinked. |
675 | | */ |
676 | | static forceinline void __eb_delete(struct eb_node *node) |
677 | 0 | { |
678 | 0 | __label__ delete_unlink; |
679 | 0 | unsigned int pside, gpside, sibtype; |
680 | 0 | struct eb_node *parent; |
681 | 0 | struct eb_root *gparent; |
682 | |
|
683 | 0 | if (!node->leaf_p) |
684 | 0 | return; |
685 | | |
686 | | /* we need the parent, our side, and the grand parent */ |
687 | 0 | pside = eb_gettag(node->leaf_p); |
688 | 0 | parent = eb_root_to_node(eb_untag(node->leaf_p, pside)); |
689 | | |
690 | | /* We likely have to release the parent link, unless it's the root, |
691 | | * in which case we only set our branch to NULL. Note that we can |
692 | | * only be attached to the root by its left branch. |
693 | | */ |
694 | |
|
695 | 0 | if (eb_clrtag(parent->branches.b[EB_RGHT]) == NULL) { |
696 | | /* we're just below the root, it's trivial. */ |
697 | 0 | parent->branches.b[EB_LEFT] = NULL; |
698 | 0 | goto delete_unlink; |
699 | 0 | } |
700 | | |
701 | | /* To release our parent, we have to identify our sibling, and reparent |
702 | | * it directly to/from the grand parent. Note that the sibling can |
703 | | * either be a link or a leaf. |
704 | | */ |
705 | | |
706 | 0 | gpside = eb_gettag(parent->node_p); |
707 | 0 | gparent = eb_untag(parent->node_p, gpside); |
708 | |
|
709 | 0 | gparent->b[gpside] = parent->branches.b[!pside]; |
710 | 0 | sibtype = eb_gettag(gparent->b[gpside]); |
711 | |
|
712 | 0 | if (sibtype == EB_LEAF) { |
713 | 0 | eb_root_to_node(eb_untag(gparent->b[gpside], EB_LEAF))->leaf_p = |
714 | 0 | eb_dotag(gparent, gpside); |
715 | 0 | } else { |
716 | 0 | eb_root_to_node(eb_untag(gparent->b[gpside], EB_NODE))->node_p = |
717 | 0 | eb_dotag(gparent, gpside); |
718 | 0 | } |
719 | | /* Mark the parent unused. Note that we do not check if the parent is |
720 | | * our own node, but that's not a problem because if it is, it will be |
721 | | * marked unused at the same time, which we'll use below to know we can |
722 | | * safely remove it. |
723 | | */ |
724 | 0 | parent->node_p = NULL; |
725 | | |
726 | | /* The parent node has been detached, and is currently unused. It may |
727 | | * belong to another node, so we cannot remove it that way. Also, our |
728 | | * own node part might still be used. so we can use this spare node |
729 | | * to replace ours if needed. |
730 | | */ |
731 | | |
732 | | /* If our link part is unused, we can safely exit now */ |
733 | 0 | if (!node->node_p) |
734 | 0 | goto delete_unlink; |
735 | | |
736 | | /* From now on, <node> and <parent> are necessarily different, and the |
737 | | * <node>'s node part is in use. By definition, <parent> is at least |
738 | | * below <node>, so keeping its key for the bit string is OK. |
739 | | */ |
740 | | |
741 | 0 | parent->node_p = node->node_p; |
742 | 0 | parent->branches = node->branches; |
743 | 0 | parent->bit = node->bit; |
744 | | |
745 | | /* We must now update the new node's parent... */ |
746 | 0 | gpside = eb_gettag(parent->node_p); |
747 | 0 | gparent = eb_untag(parent->node_p, gpside); |
748 | 0 | gparent->b[gpside] = eb_dotag(&parent->branches, EB_NODE); |
749 | | |
750 | | /* ... and its branches */ |
751 | 0 | for (pside = 0; pside <= 1; pside++) { |
752 | 0 | if (eb_gettag(parent->branches.b[pside]) == EB_NODE) { |
753 | 0 | eb_root_to_node(eb_untag(parent->branches.b[pside], EB_NODE))->node_p = |
754 | 0 | eb_dotag(&parent->branches, pside); |
755 | 0 | } else { |
756 | 0 | eb_root_to_node(eb_untag(parent->branches.b[pside], EB_LEAF))->leaf_p = |
757 | 0 | eb_dotag(&parent->branches, pside); |
758 | 0 | } |
759 | 0 | } |
760 | 0 | delete_unlink: |
761 | | /* Now the node has been completely unlinked */ |
762 | 0 | node->leaf_p = NULL; |
763 | 0 | return; /* tree is not empty yet */ |
764 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:__eb_delete Unexecuted instantiation: fuzz_cfg_parser.c:__eb_delete Unexecuted instantiation: cfgparse.c:__eb_delete Unexecuted instantiation: chunk.c:__eb_delete Unexecuted instantiation: cli.c:__eb_delete Unexecuted instantiation: clock.c:__eb_delete Unexecuted instantiation: connection.c:__eb_delete Unexecuted instantiation: debug.c:__eb_delete Unexecuted instantiation: dynbuf.c:__eb_delete Unexecuted instantiation: eb32tree.c:__eb_delete Unexecuted instantiation: ebtree.c:__eb_delete Unexecuted instantiation: errors.c:__eb_delete Unexecuted instantiation: fd.c:__eb_delete Unexecuted instantiation: filters.c:__eb_delete Unexecuted instantiation: flt_http_comp.c:__eb_delete Unexecuted instantiation: freq_ctr.c:__eb_delete Unexecuted instantiation: frontend.c:__eb_delete Unexecuted instantiation: haproxy.c:__eb_delete Unexecuted instantiation: http.c:__eb_delete Unexecuted instantiation: http_ana.c:__eb_delete Unexecuted instantiation: http_ext.c:__eb_delete Unexecuted instantiation: http_htx.c:__eb_delete Unexecuted instantiation: http_rules.c:__eb_delete Unexecuted instantiation: lb_chash.c:__eb_delete Unexecuted instantiation: lb_fas.c:__eb_delete Unexecuted instantiation: lb_fwlc.c:__eb_delete Unexecuted instantiation: lb_fwrr.c:__eb_delete Unexecuted instantiation: lb_map.c:__eb_delete Unexecuted instantiation: lb_ss.c:__eb_delete Unexecuted instantiation: limits.c:__eb_delete Unexecuted instantiation: listener.c:__eb_delete Unexecuted instantiation: log.c:__eb_delete Unexecuted instantiation: mailers.c:__eb_delete Unexecuted instantiation: mworker.c:__eb_delete Unexecuted instantiation: peers.c:__eb_delete Unexecuted instantiation: pool.c:__eb_delete Unexecuted instantiation: proto_rhttp.c:__eb_delete Unexecuted instantiation: proto_sockpair.c:__eb_delete Unexecuted instantiation: protocol.c:__eb_delete Unexecuted instantiation: proxy.c:__eb_delete Unexecuted instantiation: queue.c:__eb_delete Unexecuted instantiation: regex.c:__eb_delete Unexecuted instantiation: resolvers.c:__eb_delete Unexecuted instantiation: ring.c:__eb_delete Unexecuted instantiation: sample.c:__eb_delete Unexecuted instantiation: server.c:__eb_delete Unexecuted instantiation: session.c:__eb_delete Unexecuted instantiation: signal.c:__eb_delete Unexecuted instantiation: sink.c:__eb_delete Unexecuted instantiation: sock.c:__eb_delete Unexecuted instantiation: sock_inet.c:__eb_delete Unexecuted instantiation: stats-html.c:__eb_delete Unexecuted instantiation: stats.c:__eb_delete Unexecuted instantiation: stconn.c:__eb_delete Unexecuted instantiation: stick_table.c:__eb_delete Unexecuted instantiation: stream.c:__eb_delete Unexecuted instantiation: systemd.c:__eb_delete Unexecuted instantiation: task.c:__eb_delete Unexecuted instantiation: tcp_rules.c:__eb_delete Unexecuted instantiation: tcpcheck.c:__eb_delete Unexecuted instantiation: thread.c:__eb_delete Unexecuted instantiation: tools.c:__eb_delete Unexecuted instantiation: trace.c:__eb_delete Unexecuted instantiation: uri_auth.c:__eb_delete Unexecuted instantiation: vars.c:__eb_delete Unexecuted instantiation: acl.c:__eb_delete Unexecuted instantiation: action.c:__eb_delete Unexecuted instantiation: activity.c:__eb_delete Unexecuted instantiation: applet.c:__eb_delete Unexecuted instantiation: arg.c:__eb_delete Unexecuted instantiation: backend.c:__eb_delete Unexecuted instantiation: cache.c:__eb_delete Unexecuted instantiation: cebu64_tree.c:__eb_delete Unexecuted instantiation: cebus_tree.c:__eb_delete Unexecuted instantiation: cfgcond.c:__eb_delete Unexecuted instantiation: cfgparse-global.c:__eb_delete Unexecuted instantiation: cfgparse-listen.c:__eb_delete Unexecuted instantiation: channel.c:__eb_delete Unexecuted instantiation: check.c:__eb_delete Unexecuted instantiation: compression.c:__eb_delete Unexecuted instantiation: dgram.c:__eb_delete Unexecuted instantiation: dict.c:__eb_delete Unexecuted instantiation: dns.c:__eb_delete Unexecuted instantiation: dns_ring.c:__eb_delete Unexecuted instantiation: eb64tree.c:__eb_delete Unexecuted instantiation: ebimtree.c:__eb_delete Unexecuted instantiation: ebistree.c:__eb_delete Unexecuted instantiation: ebmbtree.c:__eb_delete Unexecuted instantiation: ebsttree.c:__eb_delete Unexecuted instantiation: event_hdl.c:__eb_delete Unexecuted instantiation: extcheck.c:__eb_delete Unexecuted instantiation: fcgi-app.c:__eb_delete Unexecuted instantiation: fix.c:__eb_delete Unexecuted instantiation: guid.c:__eb_delete Unexecuted instantiation: h1.c:__eb_delete Unexecuted instantiation: http_fetch.c:__eb_delete Unexecuted instantiation: mqtt.c:__eb_delete Unexecuted instantiation: mux_spop.c:__eb_delete Unexecuted instantiation: pattern.c:__eb_delete Unexecuted instantiation: payload.c:__eb_delete Unexecuted instantiation: proto_tcp.c:__eb_delete Unexecuted instantiation: shctx.c:__eb_delete Unexecuted instantiation: stats-file.c:__eb_delete Unexecuted instantiation: stats-json.c:__eb_delete Unexecuted instantiation: stats-proxy.c:__eb_delete Unexecuted instantiation: flt_spoe.c:__eb_delete Unexecuted instantiation: h1_htx.c:__eb_delete Unexecuted instantiation: lru.c:__eb_delete |
765 | | |
766 | | /* Compare blocks <a> and <b> byte-to-byte, from bit <ignore> to bit <len-1>. |
767 | | * Return the number of equal bits between strings, assuming that the first |
768 | | * <ignore> bits are already identical. It is possible to return slightly more |
769 | | * than <len> bits if <len> does not stop on a byte boundary and we find exact |
770 | | * bytes. Note that parts or all of <ignore> bits may be rechecked. It is only |
771 | | * passed here as a hint to speed up the check. |
772 | | */ |
773 | | static forceinline size_t equal_bits(const unsigned char *a, |
774 | | const unsigned char *b, |
775 | | size_t ignore, size_t len) |
776 | 0 | { |
777 | 0 | for (ignore >>= 3, a += ignore, b += ignore, ignore <<= 3; |
778 | 0 | ignore < len; ) { |
779 | 0 | unsigned char c; |
780 | |
|
781 | 0 | a++; b++; |
782 | 0 | ignore += 8; |
783 | 0 | c = b[-1] ^ a[-1]; |
784 | |
|
785 | 0 | if (c) { |
786 | | /* OK now we know that old and new differ at byte <ptr> and that <c> holds |
787 | | * the bit differences. We have to find what bit is differing and report |
788 | | * it as the number of identical bits. Note that low bit numbers are |
789 | | * assigned to high positions in the byte, as we compare them as strings. |
790 | | */ |
791 | 0 | ignore -= flsnz_long(c); |
792 | 0 | break; |
793 | 0 | } |
794 | 0 | } |
795 | 0 | return ignore; |
796 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:equal_bits Unexecuted instantiation: fuzz_cfg_parser.c:equal_bits Unexecuted instantiation: cfgparse.c:equal_bits Unexecuted instantiation: chunk.c:equal_bits Unexecuted instantiation: cli.c:equal_bits Unexecuted instantiation: clock.c:equal_bits Unexecuted instantiation: connection.c:equal_bits Unexecuted instantiation: debug.c:equal_bits Unexecuted instantiation: dynbuf.c:equal_bits Unexecuted instantiation: eb32tree.c:equal_bits Unexecuted instantiation: ebtree.c:equal_bits Unexecuted instantiation: errors.c:equal_bits Unexecuted instantiation: fd.c:equal_bits Unexecuted instantiation: filters.c:equal_bits Unexecuted instantiation: flt_http_comp.c:equal_bits Unexecuted instantiation: freq_ctr.c:equal_bits Unexecuted instantiation: frontend.c:equal_bits Unexecuted instantiation: haproxy.c:equal_bits Unexecuted instantiation: http.c:equal_bits Unexecuted instantiation: http_ana.c:equal_bits Unexecuted instantiation: http_ext.c:equal_bits Unexecuted instantiation: http_htx.c:equal_bits Unexecuted instantiation: http_rules.c:equal_bits Unexecuted instantiation: lb_chash.c:equal_bits Unexecuted instantiation: lb_fas.c:equal_bits Unexecuted instantiation: lb_fwlc.c:equal_bits Unexecuted instantiation: lb_fwrr.c:equal_bits Unexecuted instantiation: lb_map.c:equal_bits Unexecuted instantiation: lb_ss.c:equal_bits Unexecuted instantiation: limits.c:equal_bits Unexecuted instantiation: listener.c:equal_bits Unexecuted instantiation: log.c:equal_bits Unexecuted instantiation: mailers.c:equal_bits Unexecuted instantiation: mworker.c:equal_bits Unexecuted instantiation: peers.c:equal_bits Unexecuted instantiation: pool.c:equal_bits Unexecuted instantiation: proto_rhttp.c:equal_bits Unexecuted instantiation: proto_sockpair.c:equal_bits Unexecuted instantiation: protocol.c:equal_bits Unexecuted instantiation: proxy.c:equal_bits Unexecuted instantiation: queue.c:equal_bits Unexecuted instantiation: regex.c:equal_bits Unexecuted instantiation: resolvers.c:equal_bits Unexecuted instantiation: ring.c:equal_bits Unexecuted instantiation: sample.c:equal_bits Unexecuted instantiation: server.c:equal_bits Unexecuted instantiation: session.c:equal_bits Unexecuted instantiation: signal.c:equal_bits Unexecuted instantiation: sink.c:equal_bits Unexecuted instantiation: sock.c:equal_bits Unexecuted instantiation: sock_inet.c:equal_bits Unexecuted instantiation: stats-html.c:equal_bits Unexecuted instantiation: stats.c:equal_bits Unexecuted instantiation: stconn.c:equal_bits Unexecuted instantiation: stick_table.c:equal_bits Unexecuted instantiation: stream.c:equal_bits Unexecuted instantiation: systemd.c:equal_bits Unexecuted instantiation: task.c:equal_bits Unexecuted instantiation: tcp_rules.c:equal_bits Unexecuted instantiation: tcpcheck.c:equal_bits Unexecuted instantiation: thread.c:equal_bits Unexecuted instantiation: tools.c:equal_bits Unexecuted instantiation: trace.c:equal_bits Unexecuted instantiation: uri_auth.c:equal_bits Unexecuted instantiation: vars.c:equal_bits Unexecuted instantiation: acl.c:equal_bits Unexecuted instantiation: action.c:equal_bits Unexecuted instantiation: activity.c:equal_bits Unexecuted instantiation: applet.c:equal_bits Unexecuted instantiation: arg.c:equal_bits Unexecuted instantiation: backend.c:equal_bits Unexecuted instantiation: cache.c:equal_bits Unexecuted instantiation: cebu64_tree.c:equal_bits Unexecuted instantiation: cebus_tree.c:equal_bits Unexecuted instantiation: cfgcond.c:equal_bits Unexecuted instantiation: cfgparse-global.c:equal_bits Unexecuted instantiation: cfgparse-listen.c:equal_bits Unexecuted instantiation: channel.c:equal_bits Unexecuted instantiation: check.c:equal_bits Unexecuted instantiation: compression.c:equal_bits Unexecuted instantiation: dgram.c:equal_bits Unexecuted instantiation: dict.c:equal_bits Unexecuted instantiation: dns.c:equal_bits Unexecuted instantiation: dns_ring.c:equal_bits Unexecuted instantiation: eb64tree.c:equal_bits Unexecuted instantiation: ebimtree.c:equal_bits Unexecuted instantiation: ebistree.c:equal_bits Unexecuted instantiation: ebmbtree.c:equal_bits Unexecuted instantiation: ebsttree.c:equal_bits Unexecuted instantiation: event_hdl.c:equal_bits Unexecuted instantiation: extcheck.c:equal_bits Unexecuted instantiation: fcgi-app.c:equal_bits Unexecuted instantiation: fix.c:equal_bits Unexecuted instantiation: guid.c:equal_bits Unexecuted instantiation: h1.c:equal_bits Unexecuted instantiation: http_fetch.c:equal_bits Unexecuted instantiation: mqtt.c:equal_bits Unexecuted instantiation: mux_spop.c:equal_bits Unexecuted instantiation: pattern.c:equal_bits Unexecuted instantiation: payload.c:equal_bits Unexecuted instantiation: proto_tcp.c:equal_bits Unexecuted instantiation: shctx.c:equal_bits Unexecuted instantiation: stats-file.c:equal_bits Unexecuted instantiation: stats-json.c:equal_bits Unexecuted instantiation: stats-proxy.c:equal_bits Unexecuted instantiation: flt_spoe.c:equal_bits Unexecuted instantiation: h1_htx.c:equal_bits Unexecuted instantiation: lru.c:equal_bits |
797 | | |
798 | | /* check that the two blocks <a> and <b> are equal on <len> bits. If it is known |
799 | | * they already are on some bytes, this number of equal bytes to be skipped may |
800 | | * be passed in <skip>. It returns 0 if they match, otherwise non-zero. |
801 | | */ |
802 | | static forceinline int check_bits(const unsigned char *a, |
803 | | const unsigned char *b, |
804 | | int skip, |
805 | | int len) |
806 | 0 | { |
807 | 0 | int bit, ret; |
808 | | |
809 | | /* This uncommon construction gives the best performance on x86 because |
810 | | * it makes heavy use multiple-index addressing and parallel instructions, |
811 | | * and it prevents gcc from reordering the loop since it is already |
812 | | * properly oriented. Tested to be fine with 2.95 to 4.2. |
813 | | */ |
814 | 0 | bit = ~len + (skip << 3) + 9; // = (skip << 3) + (8 - len) |
815 | 0 | ret = a[skip] ^ b[skip]; |
816 | 0 | if (unlikely(bit >= 0)) |
817 | 0 | return ret >> bit; |
818 | 0 | while (1) { |
819 | 0 | skip++; |
820 | 0 | if (ret) |
821 | 0 | return ret; |
822 | 0 | ret = a[skip] ^ b[skip]; |
823 | 0 | bit += 8; |
824 | 0 | if (bit >= 0) |
825 | 0 | return ret >> bit; |
826 | 0 | } |
827 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:check_bits Unexecuted instantiation: fuzz_cfg_parser.c:check_bits Unexecuted instantiation: cfgparse.c:check_bits Unexecuted instantiation: chunk.c:check_bits Unexecuted instantiation: cli.c:check_bits Unexecuted instantiation: clock.c:check_bits Unexecuted instantiation: connection.c:check_bits Unexecuted instantiation: debug.c:check_bits Unexecuted instantiation: dynbuf.c:check_bits Unexecuted instantiation: eb32tree.c:check_bits Unexecuted instantiation: ebtree.c:check_bits Unexecuted instantiation: errors.c:check_bits Unexecuted instantiation: fd.c:check_bits Unexecuted instantiation: filters.c:check_bits Unexecuted instantiation: flt_http_comp.c:check_bits Unexecuted instantiation: freq_ctr.c:check_bits Unexecuted instantiation: frontend.c:check_bits Unexecuted instantiation: haproxy.c:check_bits Unexecuted instantiation: http.c:check_bits Unexecuted instantiation: http_ana.c:check_bits Unexecuted instantiation: http_ext.c:check_bits Unexecuted instantiation: http_htx.c:check_bits Unexecuted instantiation: http_rules.c:check_bits Unexecuted instantiation: lb_chash.c:check_bits Unexecuted instantiation: lb_fas.c:check_bits Unexecuted instantiation: lb_fwlc.c:check_bits Unexecuted instantiation: lb_fwrr.c:check_bits Unexecuted instantiation: lb_map.c:check_bits Unexecuted instantiation: lb_ss.c:check_bits Unexecuted instantiation: limits.c:check_bits Unexecuted instantiation: listener.c:check_bits Unexecuted instantiation: log.c:check_bits Unexecuted instantiation: mailers.c:check_bits Unexecuted instantiation: mworker.c:check_bits Unexecuted instantiation: peers.c:check_bits Unexecuted instantiation: pool.c:check_bits Unexecuted instantiation: proto_rhttp.c:check_bits Unexecuted instantiation: proto_sockpair.c:check_bits Unexecuted instantiation: protocol.c:check_bits Unexecuted instantiation: proxy.c:check_bits Unexecuted instantiation: queue.c:check_bits Unexecuted instantiation: regex.c:check_bits Unexecuted instantiation: resolvers.c:check_bits Unexecuted instantiation: ring.c:check_bits Unexecuted instantiation: sample.c:check_bits Unexecuted instantiation: server.c:check_bits Unexecuted instantiation: session.c:check_bits Unexecuted instantiation: signal.c:check_bits Unexecuted instantiation: sink.c:check_bits Unexecuted instantiation: sock.c:check_bits Unexecuted instantiation: sock_inet.c:check_bits Unexecuted instantiation: stats-html.c:check_bits Unexecuted instantiation: stats.c:check_bits Unexecuted instantiation: stconn.c:check_bits Unexecuted instantiation: stick_table.c:check_bits Unexecuted instantiation: stream.c:check_bits Unexecuted instantiation: systemd.c:check_bits Unexecuted instantiation: task.c:check_bits Unexecuted instantiation: tcp_rules.c:check_bits Unexecuted instantiation: tcpcheck.c:check_bits Unexecuted instantiation: thread.c:check_bits Unexecuted instantiation: tools.c:check_bits Unexecuted instantiation: trace.c:check_bits Unexecuted instantiation: uri_auth.c:check_bits Unexecuted instantiation: vars.c:check_bits Unexecuted instantiation: acl.c:check_bits Unexecuted instantiation: action.c:check_bits Unexecuted instantiation: activity.c:check_bits Unexecuted instantiation: applet.c:check_bits Unexecuted instantiation: arg.c:check_bits Unexecuted instantiation: backend.c:check_bits Unexecuted instantiation: cache.c:check_bits Unexecuted instantiation: cebu64_tree.c:check_bits Unexecuted instantiation: cebus_tree.c:check_bits Unexecuted instantiation: cfgcond.c:check_bits Unexecuted instantiation: cfgparse-global.c:check_bits Unexecuted instantiation: cfgparse-listen.c:check_bits Unexecuted instantiation: channel.c:check_bits Unexecuted instantiation: check.c:check_bits Unexecuted instantiation: compression.c:check_bits Unexecuted instantiation: dgram.c:check_bits Unexecuted instantiation: dict.c:check_bits Unexecuted instantiation: dns.c:check_bits Unexecuted instantiation: dns_ring.c:check_bits Unexecuted instantiation: eb64tree.c:check_bits Unexecuted instantiation: ebimtree.c:check_bits Unexecuted instantiation: ebistree.c:check_bits Unexecuted instantiation: ebmbtree.c:check_bits Unexecuted instantiation: ebsttree.c:check_bits Unexecuted instantiation: event_hdl.c:check_bits Unexecuted instantiation: extcheck.c:check_bits Unexecuted instantiation: fcgi-app.c:check_bits Unexecuted instantiation: fix.c:check_bits Unexecuted instantiation: guid.c:check_bits Unexecuted instantiation: h1.c:check_bits Unexecuted instantiation: http_fetch.c:check_bits Unexecuted instantiation: mqtt.c:check_bits Unexecuted instantiation: mux_spop.c:check_bits Unexecuted instantiation: pattern.c:check_bits Unexecuted instantiation: payload.c:check_bits Unexecuted instantiation: proto_tcp.c:check_bits Unexecuted instantiation: shctx.c:check_bits Unexecuted instantiation: stats-file.c:check_bits Unexecuted instantiation: stats-json.c:check_bits Unexecuted instantiation: stats-proxy.c:check_bits Unexecuted instantiation: flt_spoe.c:check_bits Unexecuted instantiation: h1_htx.c:check_bits Unexecuted instantiation: lru.c:check_bits |
828 | | |
829 | | |
830 | | /* Compare strings <a> and <b> byte-to-byte, from bit <ignore> to the last 0. |
831 | | * Return the number of equal bits between strings, assuming that the first |
832 | | * <ignore> bits are already identical. Note that parts or all of <ignore> bits |
833 | | * may be rechecked. It is only passed here as a hint to speed up the check. |
834 | | * The caller is responsible for not passing an <ignore> value larger than any |
835 | | * of the two strings. However, referencing any bit from the trailing zero is |
836 | | * permitted. Equal strings are reported as a negative number of bits, which |
837 | | * indicates the end was reached. |
838 | | */ |
839 | | static forceinline size_t string_equal_bits(const unsigned char *a, |
840 | | const unsigned char *b, |
841 | | size_t ignore) |
842 | 0 | { |
843 | 0 | unsigned char c, d; |
844 | 0 | size_t beg; |
845 | |
|
846 | 0 | beg = ignore >> 3; |
847 | | |
848 | | /* skip known and identical bits. We stop at the first different byte |
849 | | * or at the first zero we encounter on either side. |
850 | | */ |
851 | 0 | while (1) { |
852 | 0 | c = a[beg]; |
853 | 0 | d = b[beg]; |
854 | 0 | beg++; |
855 | |
|
856 | 0 | c ^= d; |
857 | 0 | if (c) |
858 | 0 | break; |
859 | 0 | if (!d) |
860 | 0 | return (size_t)-1; |
861 | 0 | } |
862 | | /* OK now we know that a and b differ at byte <beg>, or that both are zero. |
863 | | * We have to find what bit is differing and report it as the number of |
864 | | * identical bits. Note that low bit numbers are assigned to high positions |
865 | | * in the byte, as we compare them as strings. |
866 | | */ |
867 | 0 | return (beg << 3) - flsnz(c); |
868 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:string_equal_bits Unexecuted instantiation: fuzz_cfg_parser.c:string_equal_bits Unexecuted instantiation: cfgparse.c:string_equal_bits Unexecuted instantiation: chunk.c:string_equal_bits Unexecuted instantiation: cli.c:string_equal_bits Unexecuted instantiation: clock.c:string_equal_bits Unexecuted instantiation: connection.c:string_equal_bits Unexecuted instantiation: debug.c:string_equal_bits Unexecuted instantiation: dynbuf.c:string_equal_bits Unexecuted instantiation: eb32tree.c:string_equal_bits Unexecuted instantiation: ebtree.c:string_equal_bits Unexecuted instantiation: errors.c:string_equal_bits Unexecuted instantiation: fd.c:string_equal_bits Unexecuted instantiation: filters.c:string_equal_bits Unexecuted instantiation: flt_http_comp.c:string_equal_bits Unexecuted instantiation: freq_ctr.c:string_equal_bits Unexecuted instantiation: frontend.c:string_equal_bits Unexecuted instantiation: haproxy.c:string_equal_bits Unexecuted instantiation: http.c:string_equal_bits Unexecuted instantiation: http_ana.c:string_equal_bits Unexecuted instantiation: http_ext.c:string_equal_bits Unexecuted instantiation: http_htx.c:string_equal_bits Unexecuted instantiation: http_rules.c:string_equal_bits Unexecuted instantiation: lb_chash.c:string_equal_bits Unexecuted instantiation: lb_fas.c:string_equal_bits Unexecuted instantiation: lb_fwlc.c:string_equal_bits Unexecuted instantiation: lb_fwrr.c:string_equal_bits Unexecuted instantiation: lb_map.c:string_equal_bits Unexecuted instantiation: lb_ss.c:string_equal_bits Unexecuted instantiation: limits.c:string_equal_bits Unexecuted instantiation: listener.c:string_equal_bits Unexecuted instantiation: log.c:string_equal_bits Unexecuted instantiation: mailers.c:string_equal_bits Unexecuted instantiation: mworker.c:string_equal_bits Unexecuted instantiation: peers.c:string_equal_bits Unexecuted instantiation: pool.c:string_equal_bits Unexecuted instantiation: proto_rhttp.c:string_equal_bits Unexecuted instantiation: proto_sockpair.c:string_equal_bits Unexecuted instantiation: protocol.c:string_equal_bits Unexecuted instantiation: proxy.c:string_equal_bits Unexecuted instantiation: queue.c:string_equal_bits Unexecuted instantiation: regex.c:string_equal_bits Unexecuted instantiation: resolvers.c:string_equal_bits Unexecuted instantiation: ring.c:string_equal_bits Unexecuted instantiation: sample.c:string_equal_bits Unexecuted instantiation: server.c:string_equal_bits Unexecuted instantiation: session.c:string_equal_bits Unexecuted instantiation: signal.c:string_equal_bits Unexecuted instantiation: sink.c:string_equal_bits Unexecuted instantiation: sock.c:string_equal_bits Unexecuted instantiation: sock_inet.c:string_equal_bits Unexecuted instantiation: stats-html.c:string_equal_bits Unexecuted instantiation: stats.c:string_equal_bits Unexecuted instantiation: stconn.c:string_equal_bits Unexecuted instantiation: stick_table.c:string_equal_bits Unexecuted instantiation: stream.c:string_equal_bits Unexecuted instantiation: systemd.c:string_equal_bits Unexecuted instantiation: task.c:string_equal_bits Unexecuted instantiation: tcp_rules.c:string_equal_bits Unexecuted instantiation: tcpcheck.c:string_equal_bits Unexecuted instantiation: thread.c:string_equal_bits Unexecuted instantiation: tools.c:string_equal_bits Unexecuted instantiation: trace.c:string_equal_bits Unexecuted instantiation: uri_auth.c:string_equal_bits Unexecuted instantiation: vars.c:string_equal_bits Unexecuted instantiation: acl.c:string_equal_bits Unexecuted instantiation: action.c:string_equal_bits Unexecuted instantiation: activity.c:string_equal_bits Unexecuted instantiation: applet.c:string_equal_bits Unexecuted instantiation: arg.c:string_equal_bits Unexecuted instantiation: backend.c:string_equal_bits Unexecuted instantiation: cache.c:string_equal_bits Unexecuted instantiation: cebu64_tree.c:string_equal_bits Unexecuted instantiation: cebus_tree.c:string_equal_bits Unexecuted instantiation: cfgcond.c:string_equal_bits Unexecuted instantiation: cfgparse-global.c:string_equal_bits Unexecuted instantiation: cfgparse-listen.c:string_equal_bits Unexecuted instantiation: channel.c:string_equal_bits Unexecuted instantiation: check.c:string_equal_bits Unexecuted instantiation: compression.c:string_equal_bits Unexecuted instantiation: dgram.c:string_equal_bits Unexecuted instantiation: dict.c:string_equal_bits Unexecuted instantiation: dns.c:string_equal_bits Unexecuted instantiation: dns_ring.c:string_equal_bits Unexecuted instantiation: eb64tree.c:string_equal_bits Unexecuted instantiation: ebimtree.c:string_equal_bits Unexecuted instantiation: ebistree.c:string_equal_bits Unexecuted instantiation: ebmbtree.c:string_equal_bits Unexecuted instantiation: ebsttree.c:string_equal_bits Unexecuted instantiation: event_hdl.c:string_equal_bits Unexecuted instantiation: extcheck.c:string_equal_bits Unexecuted instantiation: fcgi-app.c:string_equal_bits Unexecuted instantiation: fix.c:string_equal_bits Unexecuted instantiation: guid.c:string_equal_bits Unexecuted instantiation: h1.c:string_equal_bits Unexecuted instantiation: http_fetch.c:string_equal_bits Unexecuted instantiation: mqtt.c:string_equal_bits Unexecuted instantiation: mux_spop.c:string_equal_bits Unexecuted instantiation: pattern.c:string_equal_bits Unexecuted instantiation: payload.c:string_equal_bits Unexecuted instantiation: proto_tcp.c:string_equal_bits Unexecuted instantiation: shctx.c:string_equal_bits Unexecuted instantiation: stats-file.c:string_equal_bits Unexecuted instantiation: stats-json.c:string_equal_bits Unexecuted instantiation: stats-proxy.c:string_equal_bits Unexecuted instantiation: flt_spoe.c:string_equal_bits Unexecuted instantiation: h1_htx.c:string_equal_bits Unexecuted instantiation: lru.c:string_equal_bits |
869 | | |
870 | | static forceinline int cmp_bits(const unsigned char *a, const unsigned char *b, unsigned int pos) |
871 | 0 | { |
872 | 0 | unsigned int ofs; |
873 | 0 | unsigned char bit_a, bit_b; |
874 | |
|
875 | 0 | ofs = pos >> 3; |
876 | 0 | pos = ~pos & 7; |
877 | |
|
878 | 0 | bit_a = (a[ofs] >> pos) & 1; |
879 | 0 | bit_b = (b[ofs] >> pos) & 1; |
880 | |
|
881 | 0 | return bit_a - bit_b; /* -1: a<b; 0: a=b; 1: a>b */ |
882 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:cmp_bits Unexecuted instantiation: fuzz_cfg_parser.c:cmp_bits Unexecuted instantiation: cfgparse.c:cmp_bits Unexecuted instantiation: chunk.c:cmp_bits Unexecuted instantiation: cli.c:cmp_bits Unexecuted instantiation: clock.c:cmp_bits Unexecuted instantiation: connection.c:cmp_bits Unexecuted instantiation: debug.c:cmp_bits Unexecuted instantiation: dynbuf.c:cmp_bits Unexecuted instantiation: eb32tree.c:cmp_bits Unexecuted instantiation: ebtree.c:cmp_bits Unexecuted instantiation: errors.c:cmp_bits Unexecuted instantiation: fd.c:cmp_bits Unexecuted instantiation: filters.c:cmp_bits Unexecuted instantiation: flt_http_comp.c:cmp_bits Unexecuted instantiation: freq_ctr.c:cmp_bits Unexecuted instantiation: frontend.c:cmp_bits Unexecuted instantiation: haproxy.c:cmp_bits Unexecuted instantiation: http.c:cmp_bits Unexecuted instantiation: http_ana.c:cmp_bits Unexecuted instantiation: http_ext.c:cmp_bits Unexecuted instantiation: http_htx.c:cmp_bits Unexecuted instantiation: http_rules.c:cmp_bits Unexecuted instantiation: lb_chash.c:cmp_bits Unexecuted instantiation: lb_fas.c:cmp_bits Unexecuted instantiation: lb_fwlc.c:cmp_bits Unexecuted instantiation: lb_fwrr.c:cmp_bits Unexecuted instantiation: lb_map.c:cmp_bits Unexecuted instantiation: lb_ss.c:cmp_bits Unexecuted instantiation: limits.c:cmp_bits Unexecuted instantiation: listener.c:cmp_bits Unexecuted instantiation: log.c:cmp_bits Unexecuted instantiation: mailers.c:cmp_bits Unexecuted instantiation: mworker.c:cmp_bits Unexecuted instantiation: peers.c:cmp_bits Unexecuted instantiation: pool.c:cmp_bits Unexecuted instantiation: proto_rhttp.c:cmp_bits Unexecuted instantiation: proto_sockpair.c:cmp_bits Unexecuted instantiation: protocol.c:cmp_bits Unexecuted instantiation: proxy.c:cmp_bits Unexecuted instantiation: queue.c:cmp_bits Unexecuted instantiation: regex.c:cmp_bits Unexecuted instantiation: resolvers.c:cmp_bits Unexecuted instantiation: ring.c:cmp_bits Unexecuted instantiation: sample.c:cmp_bits Unexecuted instantiation: server.c:cmp_bits Unexecuted instantiation: session.c:cmp_bits Unexecuted instantiation: signal.c:cmp_bits Unexecuted instantiation: sink.c:cmp_bits Unexecuted instantiation: sock.c:cmp_bits Unexecuted instantiation: sock_inet.c:cmp_bits Unexecuted instantiation: stats-html.c:cmp_bits Unexecuted instantiation: stats.c:cmp_bits Unexecuted instantiation: stconn.c:cmp_bits Unexecuted instantiation: stick_table.c:cmp_bits Unexecuted instantiation: stream.c:cmp_bits Unexecuted instantiation: systemd.c:cmp_bits Unexecuted instantiation: task.c:cmp_bits Unexecuted instantiation: tcp_rules.c:cmp_bits Unexecuted instantiation: tcpcheck.c:cmp_bits Unexecuted instantiation: thread.c:cmp_bits Unexecuted instantiation: tools.c:cmp_bits Unexecuted instantiation: trace.c:cmp_bits Unexecuted instantiation: uri_auth.c:cmp_bits Unexecuted instantiation: vars.c:cmp_bits Unexecuted instantiation: acl.c:cmp_bits Unexecuted instantiation: action.c:cmp_bits Unexecuted instantiation: activity.c:cmp_bits Unexecuted instantiation: applet.c:cmp_bits Unexecuted instantiation: arg.c:cmp_bits Unexecuted instantiation: backend.c:cmp_bits Unexecuted instantiation: cache.c:cmp_bits Unexecuted instantiation: cebu64_tree.c:cmp_bits Unexecuted instantiation: cebus_tree.c:cmp_bits Unexecuted instantiation: cfgcond.c:cmp_bits Unexecuted instantiation: cfgparse-global.c:cmp_bits Unexecuted instantiation: cfgparse-listen.c:cmp_bits Unexecuted instantiation: channel.c:cmp_bits Unexecuted instantiation: check.c:cmp_bits Unexecuted instantiation: compression.c:cmp_bits Unexecuted instantiation: dgram.c:cmp_bits Unexecuted instantiation: dict.c:cmp_bits Unexecuted instantiation: dns.c:cmp_bits Unexecuted instantiation: dns_ring.c:cmp_bits Unexecuted instantiation: eb64tree.c:cmp_bits Unexecuted instantiation: ebimtree.c:cmp_bits Unexecuted instantiation: ebistree.c:cmp_bits Unexecuted instantiation: ebmbtree.c:cmp_bits Unexecuted instantiation: ebsttree.c:cmp_bits Unexecuted instantiation: event_hdl.c:cmp_bits Unexecuted instantiation: extcheck.c:cmp_bits Unexecuted instantiation: fcgi-app.c:cmp_bits Unexecuted instantiation: fix.c:cmp_bits Unexecuted instantiation: guid.c:cmp_bits Unexecuted instantiation: h1.c:cmp_bits Unexecuted instantiation: http_fetch.c:cmp_bits Unexecuted instantiation: mqtt.c:cmp_bits Unexecuted instantiation: mux_spop.c:cmp_bits Unexecuted instantiation: pattern.c:cmp_bits Unexecuted instantiation: payload.c:cmp_bits Unexecuted instantiation: proto_tcp.c:cmp_bits Unexecuted instantiation: shctx.c:cmp_bits Unexecuted instantiation: stats-file.c:cmp_bits Unexecuted instantiation: stats-json.c:cmp_bits Unexecuted instantiation: stats-proxy.c:cmp_bits Unexecuted instantiation: flt_spoe.c:cmp_bits Unexecuted instantiation: h1_htx.c:cmp_bits Unexecuted instantiation: lru.c:cmp_bits |
883 | | |
884 | | static forceinline int get_bit(const unsigned char *a, unsigned int pos) |
885 | 0 | { |
886 | 0 | unsigned int ofs; |
887 | 0 |
|
888 | 0 | ofs = pos >> 3; |
889 | 0 | pos = ~pos & 7; |
890 | 0 | return (a[ofs] >> pos) & 1; |
891 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:get_bit Unexecuted instantiation: fuzz_cfg_parser.c:get_bit Unexecuted instantiation: cfgparse.c:get_bit Unexecuted instantiation: chunk.c:get_bit Unexecuted instantiation: cli.c:get_bit Unexecuted instantiation: clock.c:get_bit Unexecuted instantiation: connection.c:get_bit Unexecuted instantiation: debug.c:get_bit Unexecuted instantiation: dynbuf.c:get_bit Unexecuted instantiation: eb32tree.c:get_bit Unexecuted instantiation: ebtree.c:get_bit Unexecuted instantiation: errors.c:get_bit Unexecuted instantiation: fd.c:get_bit Unexecuted instantiation: filters.c:get_bit Unexecuted instantiation: flt_http_comp.c:get_bit Unexecuted instantiation: freq_ctr.c:get_bit Unexecuted instantiation: frontend.c:get_bit Unexecuted instantiation: haproxy.c:get_bit Unexecuted instantiation: http.c:get_bit Unexecuted instantiation: http_ana.c:get_bit Unexecuted instantiation: http_ext.c:get_bit Unexecuted instantiation: http_htx.c:get_bit Unexecuted instantiation: http_rules.c:get_bit Unexecuted instantiation: lb_chash.c:get_bit Unexecuted instantiation: lb_fas.c:get_bit Unexecuted instantiation: lb_fwlc.c:get_bit Unexecuted instantiation: lb_fwrr.c:get_bit Unexecuted instantiation: lb_map.c:get_bit Unexecuted instantiation: lb_ss.c:get_bit Unexecuted instantiation: limits.c:get_bit Unexecuted instantiation: listener.c:get_bit Unexecuted instantiation: log.c:get_bit Unexecuted instantiation: mailers.c:get_bit Unexecuted instantiation: mworker.c:get_bit Unexecuted instantiation: peers.c:get_bit Unexecuted instantiation: pool.c:get_bit Unexecuted instantiation: proto_rhttp.c:get_bit Unexecuted instantiation: proto_sockpair.c:get_bit Unexecuted instantiation: protocol.c:get_bit Unexecuted instantiation: proxy.c:get_bit Unexecuted instantiation: queue.c:get_bit Unexecuted instantiation: regex.c:get_bit Unexecuted instantiation: resolvers.c:get_bit Unexecuted instantiation: ring.c:get_bit Unexecuted instantiation: sample.c:get_bit Unexecuted instantiation: server.c:get_bit Unexecuted instantiation: session.c:get_bit Unexecuted instantiation: signal.c:get_bit Unexecuted instantiation: sink.c:get_bit Unexecuted instantiation: sock.c:get_bit Unexecuted instantiation: sock_inet.c:get_bit Unexecuted instantiation: stats-html.c:get_bit Unexecuted instantiation: stats.c:get_bit Unexecuted instantiation: stconn.c:get_bit Unexecuted instantiation: stick_table.c:get_bit Unexecuted instantiation: stream.c:get_bit Unexecuted instantiation: systemd.c:get_bit Unexecuted instantiation: task.c:get_bit Unexecuted instantiation: tcp_rules.c:get_bit Unexecuted instantiation: tcpcheck.c:get_bit Unexecuted instantiation: thread.c:get_bit Unexecuted instantiation: tools.c:get_bit Unexecuted instantiation: trace.c:get_bit Unexecuted instantiation: uri_auth.c:get_bit Unexecuted instantiation: vars.c:get_bit Unexecuted instantiation: acl.c:get_bit Unexecuted instantiation: action.c:get_bit Unexecuted instantiation: activity.c:get_bit Unexecuted instantiation: applet.c:get_bit Unexecuted instantiation: arg.c:get_bit Unexecuted instantiation: backend.c:get_bit Unexecuted instantiation: cache.c:get_bit Unexecuted instantiation: cebu64_tree.c:get_bit Unexecuted instantiation: cebus_tree.c:get_bit Unexecuted instantiation: cfgcond.c:get_bit Unexecuted instantiation: cfgparse-global.c:get_bit Unexecuted instantiation: cfgparse-listen.c:get_bit Unexecuted instantiation: channel.c:get_bit Unexecuted instantiation: check.c:get_bit Unexecuted instantiation: compression.c:get_bit Unexecuted instantiation: dgram.c:get_bit Unexecuted instantiation: dict.c:get_bit Unexecuted instantiation: dns.c:get_bit Unexecuted instantiation: dns_ring.c:get_bit Unexecuted instantiation: eb64tree.c:get_bit Unexecuted instantiation: ebimtree.c:get_bit Unexecuted instantiation: ebistree.c:get_bit Unexecuted instantiation: ebmbtree.c:get_bit Unexecuted instantiation: ebsttree.c:get_bit Unexecuted instantiation: event_hdl.c:get_bit Unexecuted instantiation: extcheck.c:get_bit Unexecuted instantiation: fcgi-app.c:get_bit Unexecuted instantiation: fix.c:get_bit Unexecuted instantiation: guid.c:get_bit Unexecuted instantiation: h1.c:get_bit Unexecuted instantiation: http_fetch.c:get_bit Unexecuted instantiation: mqtt.c:get_bit Unexecuted instantiation: mux_spop.c:get_bit Unexecuted instantiation: pattern.c:get_bit Unexecuted instantiation: payload.c:get_bit Unexecuted instantiation: proto_tcp.c:get_bit Unexecuted instantiation: shctx.c:get_bit Unexecuted instantiation: stats-file.c:get_bit Unexecuted instantiation: stats-json.c:get_bit Unexecuted instantiation: stats-proxy.c:get_bit Unexecuted instantiation: flt_spoe.c:get_bit Unexecuted instantiation: h1_htx.c:get_bit Unexecuted instantiation: lru.c:get_bit |
892 | | |
893 | | /* These functions are declared in ebtree.c */ |
894 | | void eb_delete(struct eb_node *node); |
895 | | struct eb_node *eb_insert_dup(struct eb_node *sub, struct eb_node *new); |
896 | | int eb_memcmp(const void *m1, const void *m2, size_t len); |
897 | | |
898 | | #endif /* _EB_TREE_H */ |
899 | | |
900 | | /* |
901 | | * Local variables: |
902 | | * c-indent-level: 8 |
903 | | * c-basic-offset: 8 |
904 | | * End: |
905 | | */ |