From: Willy Tarreau Date: Tue, 16 Sep 2025 08:41:19 +0000 (+0200) Subject: CLEANUP: tools: use the item API for the file names tree X-Git-Tag: v3.3-dev9~85 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c058cc5ddf7bdfe3e3298ec541089acd76530c4c;p=thirdparty%2Fhaproxy.git CLEANUP: tools: use the item API for the file names tree The file names tree uses the immediate cebtree API, better use the item one which is more expressive and safer. --- diff --git a/src/tools.c b/src/tools.c index 929d93512..3acbc56c7 100644 --- a/src/tools.c +++ b/src/tools.c @@ -7247,20 +7247,18 @@ int restore_env(void) const char *copy_file_name(const char *name) { struct file_name_node *file; - struct ceb_node *node; + struct file_name_node *file2; size_t len; if (!name) return NULL; HA_RWLOCK_RDLOCK(OTHER_LOCK, &file_names.lock); - node = cebus_imm_lookup(&file_names.root, name); + file = cebus_item_lookup(&file_names.root, node, name, name, struct file_name_node); HA_RWLOCK_RDUNLOCK(OTHER_LOCK, &file_names.lock); - if (node) { - file = container_of(node, struct file_name_node, node); + if (file) return file->name; - } len = strlen(name); file = malloc(sizeof(struct file_name_node) + len + 1); @@ -7269,13 +7267,13 @@ const char *copy_file_name(const char *name) memcpy(file->name, name, len + 1); HA_RWLOCK_WRLOCK(OTHER_LOCK, &file_names.lock); - node = cebus_imm_insert(&file_names.root, &file->node); + file2 = cebus_item_insert(&file_names.root, node, name, file); HA_RWLOCK_WRUNLOCK(OTHER_LOCK, &file_names.lock); - if (node != &file->node) { + if (file2 != file) { /* the node was created in between */ free(file); - file = container_of(node, struct file_name_node, node); + file = file2; } return file->name; } @@ -7284,13 +7282,11 @@ const char *copy_file_name(const char *name) void free_all_file_names() { struct file_name_node *file; - struct ceb_node *node; HA_RWLOCK_WRLOCK(OTHER_LOCK, &file_names.lock); - while ((node = cebus_imm_first(&file_names.root))) { - file = container_of(node, struct file_name_node, node); - cebus_imm_delete(&file_names.root, node); + while ((file = cebus_item_first(&file_names.root, node, name, struct file_name_node))) { + cebus_item_delete(&file_names.root, node, name, file); free(file); }