From: Arran Cudbard-Bell Date: Fri, 16 Apr 2021 15:14:41 +0000 (-0500) Subject: Just use a single trie alloc function X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=83f35efd34ff4691405d3efab9566cd1661e831d;p=thirdparty%2Ffreeradius-server.git Just use a single trie alloc function Most of these uses should be fixed up to use a key callback anyway.... --- diff --git a/src/lib/io/master.c b/src/lib/io/master.c index d0658c8a3b1..dfff23bbcaa 100644 --- a/src/lib/io/master.c +++ b/src/lib/io/master.c @@ -2723,7 +2723,7 @@ fr_trie_t *fr_master_io_network(TALLOC_CTX *ctx, int af, fr_ipaddr_t *allow, fr_ fr_trie_t *trie; size_t i, num; - MEM(trie = fr_trie_alloc(ctx)); + MEM(trie = fr_trie_alloc(ctx, NULL, NULL)); num = talloc_array_length(allow); fr_assert(num > 0); @@ -2958,7 +2958,7 @@ int fr_master_io_listen(TALLOC_CTX *ctx, fr_io_instance_t *inst, fr_schedule_t * /* * Create the trie of clients for this socket. */ - MEM(thread->trie = fr_trie_alloc(thread)); + MEM(thread->trie = fr_trie_alloc(thread, NULL, NULL)); MEM(thread->alive_clients = fr_heap_alloc(thread, alive_client_cmp, fr_io_client_t, alive_id)); diff --git a/src/lib/server/client.c b/src/lib/server/client.c index bec93f5bcd6..9daf087b516 100644 --- a/src/lib/server/client.c +++ b/src/lib/server/client.c @@ -115,25 +115,25 @@ RADCLIENT_LIST *client_list_init(CONF_SECTION *cs) clients->name = talloc_strdup(clients, cs ? cf_section_name1(cs) : "root"); #ifdef WITH_TRIE - clients->v4_udp = fr_trie_alloc(clients); + clients->v4_udp = fr_trie_alloc(clients, NULL, NULL); if (!clients->v4_udp) { talloc_free(clients); return NULL; } - clients->v6_udp = fr_trie_alloc(clients); + clients->v6_udp = fr_trie_alloc(clients, NULL, NULL); if (!clients->v6_udp) { talloc_free(clients); return NULL; } - clients->v4_tcp = fr_trie_alloc(clients); + clients->v4_tcp = fr_trie_alloc(clients, NULL, NULL); if (!clients->v4_tcp) { talloc_free(clients); return NULL; } - clients->v6_tcp = fr_trie_alloc(clients); + clients->v6_tcp = fr_trie_alloc(clients, NULL, NULL); if (!clients->v6_tcp) { talloc_free(clients); return NULL; diff --git a/src/lib/util/htrie.c b/src/lib/util/htrie.c index 68a0ec6a7f1..449663fdf06 100644 --- a/src/lib/util/htrie.c +++ b/src/lib/util/htrie.c @@ -24,12 +24,12 @@ RCSID("$Id$") #include -fr_htrie_t *fr_htrie_create(TALLOC_CTX *ctx, - fr_htrie_type_t type, - fr_hash_t hash_node, - fr_cmp_t cmp_node, - fr_trie_key_t get_key, - fr_free_t free_node) +fr_htrie_t *fr_htrie_alloc(TALLOC_CTX *ctx, + fr_htrie_type_t type, + fr_hash_t hash_node, + fr_cmp_t cmp_node, + fr_trie_key_t get_key, + fr_free_t free_node) { fr_htrie_t *trie; @@ -78,7 +78,7 @@ fr_htrie_t *fr_htrie_create(TALLOC_CTX *ctx, case FR_HTRIE_TRIE: if (!get_key) return NULL; - trie->ctx = fr_trie_generic_alloc(trie, get_key, free_node); + trie->ctx = fr_trie_alloc(trie, get_key, free_node); if (!trie->ctx) { talloc_free(trie); return NULL; diff --git a/src/lib/util/htrie.h b/src/lib/util/htrie.h index 17849af9263..c969c140fdb 100644 --- a/src/lib/util/htrie.h +++ b/src/lib/util/htrie.h @@ -19,7 +19,7 @@ * * @file src/lib/util/htrie.h * - * @copyright 2005,2006 The FreeRADIUS server project + * @copyright 2021 The FreeRADIUS server project */ RCSIDH(htrie_h, "$Id$") @@ -30,7 +30,7 @@ extern "C" { #include #include #include - + typedef struct fr_htrie_s fr_htrie_t; typedef void *(*fr_htrie_find_t)(fr_htrie_t *ht, void const *data); @@ -55,7 +55,7 @@ struct fr_htrie_s { fr_htrie_remove_t remove; fr_htrie_delete_t delete; fr_htrie_num_elements_t num_elements; - + }; typedef enum { @@ -64,7 +64,7 @@ typedef enum { FR_HTRIE_TRIE, } fr_htrie_type_t; -fr_htrie_t *fr_htrie_create(TALLOC_CTX *ctx, +fr_htrie_t *fr_htrie_alloc(TALLOC_CTX *ctx, fr_htrie_type_t type, fr_hash_t hash_node, fr_cmp_t cmp_node, diff --git a/src/lib/util/trie.c b/src/lib/util/trie.c index 3aa43a01e5f..88e74c486d8 100644 --- a/src/lib/util/trie.c +++ b/src/lib/util/trie.c @@ -739,7 +739,7 @@ typedef struct { * - NULL on error * - fr_trie_node_t on success */ -fr_trie_t *_fr_trie_alloc(TALLOC_CTX *ctx, fr_trie_key_t get_key, fr_free_t free_data) +fr_trie_t *fr_trie_alloc(TALLOC_CTX *ctx, fr_trie_key_t get_key, fr_free_t free_data) { fr_trie_user_t *user; fr_trie_ctx_t *uctx; @@ -3422,7 +3422,7 @@ int main(int argc, char **argv) data_ctx = talloc_init_const("data_ctx"); - ft = fr_trie_alloc(NULL); + ft = fr_trie_alloc(NULL, NULL, NULL); if (!ft) { fprintf(stderr, "Failed creating trie\n"); fr_exit_now(1); diff --git a/src/lib/util/trie.h b/src/lib/util/trie.h index 213a2cea69d..b76707f9524 100644 --- a/src/lib/util/trie.h +++ b/src/lib/util/trie.h @@ -55,15 +55,14 @@ typedef int (*fr_trie_walk_t)(uint8_t const *key, size_t keylen, void *data, voi */ typedef int (*fr_trie_key_t)(uint8_t **out, size_t *outlen, void const *data); -#define fr_trie_alloc(_ctx) _fr_trie_alloc(_ctx, NULL, NULL) +fr_trie_t *fr_trie_alloc(TALLOC_CTX *ctx, fr_trie_key_t get_key, fr_free_t free_node); -#define fr_trie_generic_alloc(_ctx, _get_key, _free_data) _fr_trie_alloc(_ctx, _get_key, _free_data) - -fr_trie_t *_fr_trie_alloc(TALLOC_CTX *ctx, fr_trie_key_t get_key, fr_free_t free_node); int fr_trie_insert_by_key(fr_trie_t *ft, void const *key, size_t keylen, void const *data) CC_HINT(nonnull); void *fr_trie_lookup_by_key(fr_trie_t const *ft, void const *key, size_t keylen) CC_HINT(nonnull); + void *fr_trie_match_by_key(fr_trie_t const *ft, void const *key, size_t keylen) CC_HINT(nonnull); + void *fr_trie_remove_by_key(fr_trie_t *ft, void const *key, size_t keylen) CC_HINT(nonnull); int fr_trie_walk(fr_trie_t *ft, void *ctx, fr_trie_walk_t callback) CC_HINT(nonnull(1,3)); diff --git a/src/listen/radius/proto_radius_tcp.c b/src/listen/radius/proto_radius_tcp.c index db95982e96a..b03fd554911 100644 --- a/src/listen/radius/proto_radius_tcp.c +++ b/src/listen/radius/proto_radius_tcp.c @@ -439,7 +439,7 @@ static int mod_bootstrap(void *instance, CONF_SECTION *cs) return -1; } } else { - MEM(inst->trie = fr_trie_alloc(inst)); + MEM(inst->trie = fr_trie_alloc(inst, NULL, NULL)); for (i = 0; i < num; i++) { fr_ipaddr_t *network; diff --git a/src/modules/rlm_csv/rlm_csv.c b/src/modules/rlm_csv/rlm_csv.c index 3e2cd013db1..84ca896afa7 100644 --- a/src/modules/rlm_csv/rlm_csv.c +++ b/src/modules/rlm_csv/rlm_csv.c @@ -565,7 +565,7 @@ static int mod_bootstrap(void *instance, CONF_SECTION *conf) */ if ((inst->key_data_type == FR_TYPE_IPV4_ADDR) || (inst->key_data_type == FR_TYPE_IPV4_PREFIX) || (inst->key_data_type == FR_TYPE_IPV6_ADDR) || (inst->key_data_type == FR_TYPE_IPV6_PREFIX)) { - MEM(inst->trie = fr_trie_alloc(inst)); + MEM(inst->trie = fr_trie_alloc(inst, NULL, NULL)); } else { MEM(inst->tree = fr_rb_inline_talloc_alloc(inst, rlm_csv_entry_t, node, csv_entry_cmp, NULL, 0)); } diff --git a/src/modules/rlm_isc_dhcp/rlm_isc_dhcp.c b/src/modules/rlm_isc_dhcp/rlm_isc_dhcp.c index 597c5067259..ed8129aab34 100644 --- a/src/modules/rlm_isc_dhcp/rlm_isc_dhcp.c +++ b/src/modules/rlm_isc_dhcp/rlm_isc_dhcp.c @@ -1576,7 +1576,7 @@ static int parse_subnet(rlm_isc_dhcp_tokenizer_t *state, rlm_isc_dhcp_info_t *in } } else { - parent->subnets = fr_trie_alloc(parent); + parent->subnets = fr_trie_alloc(parent, NULL, NULL); if (!parent->subnets) return -1; } diff --git a/src/modules/rlm_sql/sql_state.c b/src/modules/rlm_sql/sql_state.c index 812adc4aa6a..bd151fe16e6 100644 --- a/src/modules/rlm_sql/sql_state.c +++ b/src/modules/rlm_sql/sql_state.c @@ -103,7 +103,7 @@ fr_trie_t *sql_state_trie_alloc(TALLOC_CTX *ctx) { fr_trie_t *states; - MEM(states = fr_trie_alloc(ctx)); + MEM(states = fr_trie_alloc(ctx, NULL, NULL)); if (sql_state_entries_from_table(states, sql_2011_classes) < 0) { talloc_free(states);