| commit 5e598c2bbf938eac0f4045f5143f9dd723646672 |
| Author: Florian Weimer <fweimer@redhat.com> |
| Date: Fri Oct 30 18:40:28 2020 +0100 |
| |
| elf: In ldconfig, extract the new_sub_entry function from search_dir |
| |
| Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> |
| |
| diff --git a/elf/ldconfig.c b/elf/ldconfig.c |
| index 7c8fd29387463a8a..be730ceb075f6c1f 100644 |
| |
| |
| @@ -328,6 +328,23 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ |
| "Andreas Jaeger"); |
| } |
| |
| +/* Allocate a new subdirectory with full path PATH under ENTRY, using |
| + inode data from *ST. */ |
| +static struct dir_entry * |
| +new_sub_entry (const struct dir_entry *entry, const char *path, |
| + const struct stat64 *st) |
| +{ |
| + struct dir_entry *new_entry = xmalloc (sizeof (struct dir_entry)); |
| + new_entry->from_file = entry->from_file; |
| + new_entry->from_line = entry->from_line; |
| + new_entry->path = xstrdup (path); |
| + new_entry->flag = entry->flag; |
| + new_entry->next = NULL; |
| + new_entry->ino = st->st_ino; |
| + new_entry->dev = st->st_dev; |
| + return new_entry; |
| +} |
| + |
| /* Add a single directory entry. */ |
| static void |
| add_single_dir (struct dir_entry *entry, int verbose) |
| @@ -823,26 +840,17 @@ search_dir (const struct dir_entry *entry) |
| |
| if (is_dir && is_hwcap_platform (direntry->d_name)) |
| { |
| - /* Handle subdirectory later. */ |
| - struct dir_entry *new_entry; |
| - |
| - new_entry = xmalloc (sizeof (struct dir_entry)); |
| - new_entry->from_file = entry->from_file; |
| - new_entry->from_line = entry->from_line; |
| - new_entry->path = xstrdup (file_name); |
| - new_entry->flag = entry->flag; |
| - new_entry->next = NULL; |
| if (!is_link |
| && direntry->d_type != DT_UNKNOWN |
| && __builtin_expect (lstat64 (real_file_name, &lstat_buf), 0)) |
| { |
| error (0, errno, _("Cannot lstat %s"), file_name); |
| - free (new_entry->path); |
| - free (new_entry); |
| continue; |
| } |
| - new_entry->ino = lstat_buf.st_ino; |
| - new_entry->dev = lstat_buf.st_dev; |
| + |
| + /* Handle subdirectory later. */ |
| + struct dir_entry *new_entry = new_sub_entry (entry, file_name, |
| + &lstat_buf); |
| add_single_dir (new_entry, 0); |
| continue; |
| } |