diff options
author | Florian Weimer <fweimer@redhat.com> | 2020-10-30 18:40:28 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2020-10-30 18:40:28 +0100 |
commit | 5e598c2bbf938eac0f4045f5143f9dd723646672 (patch) | |
tree | 0c41efd2cba2e17ddcbf7a379169fe3c49d5517a | |
parent | b853a4176c4da584b8adfcef4f1f2631d08e42a7 (diff) | |
download | glibc-5e598c2bbf938eac0f4045f5143f9dd723646672.tar.gz glibc-5e598c2bbf938eac0f4045f5143f9dd723646672.tar.xz glibc-5e598c2bbf938eac0f4045f5143f9dd723646672.zip |
elf: In ldconfig, extract the new_sub_entry function from search_dir
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-rw-r--r-- | elf/ldconfig.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/elf/ldconfig.c b/elf/ldconfig.c index 0c090dca15..3768267bac 100644 --- a/elf/ldconfig.c +++ b/elf/ldconfig.c @@ -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; } |