diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-06-28 05:07:08 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-06-28 05:07:08 +0000 |
commit | 539842a4ea456e0caabc7dc00d46daa1a97c8c07 (patch) | |
tree | d6b06894c4bdfb2e8ebc2b6853e5c78d17b789fe /elf | |
parent | Update. (diff) | |
download | glibc-539842a4ea456e0caabc7dc00d46daa1a97c8c07.tar.gz glibc-539842a4ea456e0caabc7dc00d46daa1a97c8c07.tar.bz2 glibc-539842a4ea456e0caabc7dc00d46daa1a97c8c07.zip |
Update.
* elf/ldconfig.c (add_dir): Take chroot into account.
Based on changes by HJ Lu and Hideki Iwamoto.
Diffstat (limited to 'elf')
-rw-r--r-- | elf/ldconfig.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/elf/ldconfig.c b/elf/ldconfig.c index bf103c7269..d85bbc8f05 100644 --- a/elf/ldconfig.c +++ b/elf/ldconfig.c @@ -318,17 +318,13 @@ add_single_dir (struct dir_entry *entry, int verbose) static void add_dir (const char *line) { - char *equal_sign; - struct dir_entry *entry; unsigned int i; - struct stat64 stat_buf; - - entry = xmalloc (sizeof (struct dir_entry)); + struct dir_entry *entry = xmalloc (sizeof (struct dir_entry)); entry->next = NULL; /* Search for an '=' sign. */ entry->path = xstrdup (line); - equal_sign = strchr (entry->path, '='); + char *equal_sign = strchr (entry->path, '='); if (equal_sign) { *equal_sign = '\0'; @@ -358,19 +354,28 @@ add_dir (const char *line) while (entry->path[i] == '/' && i > 0) entry->path[i--] = '\0'; - if (stat64 (entry->path, &stat_buf)) + char *path = entry->path; + if (opt_chroot) + path = chroot_canon (opt_chroot, path); + + struct stat64 stat_buf; + if (path == NULL || stat64 (path, &stat_buf)) { if (opt_verbose) error (0, errno, _("Can't stat %s"), entry->path); free (entry->path); free (entry); - return; } + else + { + entry->ino = stat_buf.st_ino; + entry->dev = stat_buf.st_dev; - entry->ino = stat_buf.st_ino; - entry->dev = stat_buf.st_dev; + add_single_dir (entry, 1); + } - add_single_dir (entry, 1); + if (opt_chroot) + free (path); } |