From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2178) id 954AB398BC27; Thu, 1 Oct 2020 16:55:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 954AB398BC27 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Florian Weimer To: glibc-cvs@sourceware.org Subject: [glibc/fw/glibc-hwcaps] elf: In ldconfig, extract the new_sub_entry function from search_dir X-Act-Checkin: glibc X-Git-Author: Florian Weimer X-Git-Refname: refs/heads/fw/glibc-hwcaps X-Git-Oldrev: c27e67d78494ae19a8a3bd0f3add4567a9900aae X-Git-Newrev: 7daa92c1e6540266ddddfe16f97af2fa7f720b65 Message-Id: <20201001165522.954AB398BC27@sourceware.org> Date: Thu, 1 Oct 2020 16:55:22 +0000 (GMT) X-BeenThere: glibc-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Glibc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Oct 2020 16:55:22 -0000 https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=7daa92c1e6540266ddddfe16f97af2fa7f720b65 commit 7daa92c1e6540266ddddfe16f97af2fa7f720b65 Author: Florian Weimer Date: Thu Jun 18 11:44:07 2020 +0200 elf: In ldconfig, extract the new_sub_entry function from search_dir Diff: --- elf/ldconfig.c | 34 +++++++++++++++++++++------------- 1 file 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; }