PR binutils/11742

* readelf.c (get_archive_member_name): Formatting.  Properly
	handle full size ar_name.
This commit is contained in:
Alan Modra 2010-11-18 07:54:07 +00:00
parent 99753d9d70
commit 3832723d11
2 changed files with 34 additions and 13 deletions

View File

@ -1,3 +1,9 @@
2010-11-18 Alan Modra <amodra@gmail.com>
PR binutils/11742
* readelf.c (get_archive_member_name): Formatting. Properly
handle full size ar_name.
2010-11-17 Alan Modra <amodra@gmail.com> 2010-11-17 Alan Modra <amodra@gmail.com>
* ar.c (print_contents): Don't internationalize strings without words. * ar.c (print_contents): Don't internationalize strings without words.

View File

@ -12831,14 +12831,20 @@ get_archive_member_name (struct archive_info * arch,
/* This is a proxy for a member of a nested archive. /* This is a proxy for a member of a nested archive.
Find the name of the member in that archive. */ Find the name of the member in that archive. */
member_file_name = adjust_relative_path (arch->file_name, arch->longnames + k, j - k); member_file_name = adjust_relative_path (arch->file_name,
arch->longnames + k, j - k);
if (member_file_name != NULL if (member_file_name != NULL
&& setup_nested_archive (nested_arch, member_file_name) == 0 && setup_nested_archive (nested_arch, member_file_name) == 0)
&& (member_name = get_archive_member_name_at (nested_arch, arch->nested_member_origin, NULL)) != NULL) {
{ member_name = get_archive_member_name_at (nested_arch,
free (member_file_name); arch->nested_member_origin,
return member_name; NULL);
} if (member_name != NULL)
{
free (member_file_name);
return member_name;
}
}
free (member_file_name); free (member_file_name);
/* Last resort: just return the name of the nested archive. */ /* Last resort: just return the name of the nested archive. */
@ -12846,12 +12852,21 @@ get_archive_member_name (struct archive_info * arch,
} }
/* We have a normal (short) name. */ /* We have a normal (short) name. */
j = 0; for (j = 0; j < sizeof (arch->arhdr.ar_name); j++)
while ((arch->arhdr.ar_name[j] != '/') if (arch->arhdr.ar_name[j] == '/')
&& (j < sizeof (arch->arhdr.ar_name) - 1)) {
j++; arch->arhdr.ar_name[j] = '\0';
arch->arhdr.ar_name[j] = '\0'; return arch->arhdr.ar_name;
return arch->arhdr.ar_name; }
/* The full ar_name field is used. Don't rely on ar_date starting
with a zero byte. */
{
char *name = xmalloc (sizeof (arch->arhdr.ar_name) + 1);
memcpy (name, arch->arhdr.ar_name, sizeof (arch->arhdr.ar_name));
name[sizeof (arch->arhdr.ar_name)] = '\0';
return name;
}
} }
/* Get the name of an archive member at a given OFFSET within an archive ARCH. */ /* Get the name of an archive member at a given OFFSET within an archive ARCH. */