From: Matthieu Longo Date: Tue, 25 Feb 2025 11:29:01 +0000 (+0000) Subject: refactoring elf_find_and_remove_property X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cf3825777802a65f5476ff2652dc1c1c26e6728a;p=thirdparty%2Fbinutils-gdb.git 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. --- diff --git a/bfd/elf-properties.c b/bfd/elf-properties.c index 0dea9d53c45..07ab38098e6 100644 --- a/bfd/elf-properties.c +++ b/bfd/elf-properties.c @@ -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. */