refactoring elf_find_and_remove_property

This refactoring focuses primarily on code readability and reuse.
- Use the already defined _bfd_elf_find_property instead of another
  raw for-loop.
- Extract _bfd_elf_remove_property out of the function body.
This commit is contained in:
Matthieu Longo
2025-02-25 11:29:01 +00:00
parent b2bc643e09
commit cf38257778

View File

@@ -70,6 +70,27 @@ _bfd_elf_insert_property (elf_property_list *l,
return l;
}
/* Remove a property from the list after prev. */
static elf_property_list *
_bfd_elf_remove_property (elf_property_list *l,
elf_property_list *what,
elf_property_list *prev)
{
if (l == NULL)
return l;
if (prev == NULL) // Pop front
{
BFD_ASSERT (what == l);
l = what->next;
}
else
prev->next = what->next;
what->next = NULL;
return l;
}
/* Get a property, allocate a new one if needed. */
elf_property *
@@ -395,23 +416,16 @@ static elf_property *
elf_find_and_remove_property (elf_property_list **listp,
unsigned int type, bool rm)
{
elf_property_list *list;
elf_property_list *prev;
elf_property_list *p = _bfd_elf_find_property (*listp, type, &prev);
if (p == NULL)
return NULL;
for (list = *listp; list; list = list->next)
{
if (type == list->property.pr_type)
{
/* Remove this property. */
if (rm)
*listp = list->next;
return &list->property;
}
else if (type < list->property.pr_type)
break;
listp = &list->next;
}
if (rm)
*listp = _bfd_elf_remove_property (*listp, p, prev);
return NULL;
/* FIXME: we leak memory with this approach. */
return &p->property;
}
/* Merge GNU property list *LISTP in ABFD with FIRST_PBFD. */