2424#include <fluent-bit/flb_routes_mask.h>
2525
2626
27+ size_t flb_routes_mask_get_size (struct flb_router * router )
28+ {
29+ if (router == NULL ) {
30+ return 0 ;
31+ }
32+
33+ return router -> route_mask_size ;
34+ }
35+
36+ size_t flb_routes_mask_get_slots (struct flb_router * router )
37+ {
38+ if (router == NULL ) {
39+ return 0 ;
40+ }
41+
42+ return router -> route_mask_slots ;
43+ }
44+
2745/*
2846 * Set the routes_mask for input chunk with a router_match on tag, return a
2947 * non-zero value if any routes matched
@@ -34,17 +52,20 @@ int flb_routes_mask_set_by_tag(flb_route_mask_element *routes_mask,
3452 struct flb_input_instance * in )
3553{
3654 int has_routes = 0 ;
55+ size_t size ;
3756 struct mk_list * o_head ;
3857 struct flb_output_instance * o_ins ;
3958 if (!in ) {
4059 return 0 ;
4160 }
4261
62+ if (in -> config == NULL || in -> config -> router == NULL ) {
63+ return 0 ;
64+ }
65+
4366 /* Clear the bit field */
44- memset (routes_mask ,
45- 0 ,
46- sizeof (flb_route_mask_element ) *
47- in -> config -> route_mask_size );
67+ size = flb_routes_mask_get_size (in -> config -> router );
68+ memset (routes_mask , 0 , sizeof (flb_route_mask_element ) * size );
4869
4970 /* Find all matching routes for the given tag */
5071 mk_list_foreach (o_head , & in -> config -> outputs ) {
@@ -58,7 +79,7 @@ int flb_routes_mask_set_by_tag(flb_route_mask_element *routes_mask,
5879 , NULL
5980#endif
6081 )) {
61- flb_routes_mask_set_bit (routes_mask , o_ins -> id , o_ins -> config );
82+ flb_routes_mask_set_bit (routes_mask , o_ins -> id , o_ins -> config -> router );
6283 has_routes = 1 ;
6384 }
6485 }
@@ -74,13 +95,17 @@ int flb_routes_mask_set_by_tag(flb_route_mask_element *routes_mask,
7495 *
7596 */
7697void flb_routes_mask_set_bit (flb_route_mask_element * routes_mask , int value ,
77- struct flb_config * config )
98+ struct flb_router * router )
7899{
79100 int index ;
80101 uint64_t bit ;
81102
82- if (value < 0 || value >= config -> route_mask_slots ) {
83- flb_warn ("[routes_mask] Can't set bit (%d) past limits of bitfield" ,
103+ if (router == NULL ) {
104+ return ;
105+ }
106+
107+ if (value < 0 || value >= router -> route_mask_slots ) {
108+ flb_warn ("[routes_mask] Can't clear bit (%d) past limits of bitfield" ,
84109 value );
85110 return ;
86111 }
@@ -98,12 +123,16 @@ void flb_routes_mask_set_bit(flb_route_mask_element *routes_mask, int value,
98123 *
99124 */
100125void flb_routes_mask_clear_bit (flb_route_mask_element * routes_mask , int value ,
101- struct flb_config * config )
126+ struct flb_router * router )
102127{
103128 int index ;
104129 uint64_t bit ;
105130
106- if (value < 0 || value >= config -> route_mask_slots ) {
131+ if (router == NULL ) {
132+ return ;
133+ }
134+
135+ if (value < 0 || value >= router -> route_mask_slots ) {
107136 flb_warn ("[routes_mask] Can't set bit (%d) past limits of bitfield" ,
108137 value );
109138 return ;
@@ -123,12 +152,16 @@ void flb_routes_mask_clear_bit(flb_route_mask_element *routes_mask, int value,
123152 *
124153 */
125154int flb_routes_mask_get_bit (flb_route_mask_element * routes_mask , int value ,
126- struct flb_config * config )
155+ struct flb_router * router )
127156{
128157 int index ;
129158 uint64_t bit ;
130159
131- if (value < 0 || value >= config -> route_mask_slots ) {
160+ if (router == NULL ) {
161+ return 0 ;
162+ }
163+
164+ if (value < 0 || value >= router -> route_mask_slots ) {
132165 flb_warn ("[routes_mask] Can't get bit (%d) past limits of bitfield" ,
133166 value );
134167 return 0 ;
@@ -140,47 +173,63 @@ int flb_routes_mask_get_bit(flb_route_mask_element *routes_mask, int value,
140173}
141174
142175int flb_routes_mask_is_empty (flb_route_mask_element * routes_mask ,
143- struct flb_config * config )
176+ struct flb_router * router )
144177{
178+ if (router == NULL || router -> route_empty_mask == NULL ) {
179+ return 0 ;
180+ }
181+
145182 return memcmp (routes_mask ,
146- config -> route_empty_mask ,
147- config -> route_mask_size * sizeof (flb_route_mask_element )) == 0 ;
183+ router -> route_empty_mask ,
184+ router -> route_mask_size * sizeof (flb_route_mask_element )) == 0 ;
148185}
149186
150- int flb_routes_empty_mask_create (struct flb_config * config )
187+ int flb_routes_empty_mask_create (struct flb_router * router )
151188{
152- flb_routes_empty_mask_destroy (config );
189+ if (router == NULL ) {
190+ return -1 ;
191+ }
192+
193+ flb_routes_empty_mask_destroy (router );
153194
154- config -> route_empty_mask = flb_calloc (config -> route_mask_size ,
195+ router -> route_empty_mask = flb_calloc (router -> route_mask_size ,
155196 sizeof (flb_route_mask_element ));
156197
157- if (config -> route_empty_mask == NULL ) {
198+ if (router -> route_empty_mask == NULL ) {
158199 return -1 ;
159200 }
160201
161202 return 0 ;
162203}
163204
164- void flb_routes_empty_mask_destroy (struct flb_config * config )
205+ void flb_routes_empty_mask_destroy (struct flb_router * router )
165206{
166- if (config -> route_empty_mask != NULL ) {
167- flb_free (config -> route_empty_mask );
207+ if (router == NULL ) {
208+ return ;
209+ }
168210
169- config -> route_empty_mask = NULL ;
211+ if (router -> route_empty_mask != NULL ) {
212+ flb_free (router -> route_empty_mask );
213+
214+ router -> route_empty_mask = NULL ;
170215 }
171216}
172217
173- int flb_routes_mask_set_size (size_t mask_size , struct flb_config * config )
218+ int flb_routes_mask_set_size (size_t mask_size , struct flb_router * router )
174219{
220+ if (router == NULL ) {
221+ return -1 ;
222+ }
223+
175224 if (mask_size < 1 ) {
176225 mask_size = 1 ;
177226 }
178227
179- mask_size = (mask_size / FLB_ROUTES_MASK_ELEMENT_BITS ) +
180- ( mask_size % FLB_ROUTES_MASK_ELEMENT_BITS ) ;
228+ mask_size = (mask_size + FLB_ROUTES_MASK_ELEMENT_BITS - 1 ) /
229+ FLB_ROUTES_MASK_ELEMENT_BITS ;
181230
182- config -> route_mask_size = mask_size ;
183- config -> route_mask_slots = mask_size * FLB_ROUTES_MASK_ELEMENT_BITS ;
231+ router -> route_mask_size = mask_size ;
232+ router -> route_mask_slots = mask_size * FLB_ROUTES_MASK_ELEMENT_BITS ;
184233
185- return flb_routes_empty_mask_create (config );
234+ return flb_routes_empty_mask_create (router );
186235}
0 commit comments