mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-20 21:31:28 +02:00
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.
This commit is contained in:
parent
2d6b5c7a60
commit
c058cc5ddf
20
src/tools.c
20
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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user