forked from Imagelibrary/binutils-gdb
2012-01-10 Tristan Gingold <gingold@adacore.com>
* bfdio.c (bfd_tell): Handle nested archives. (bfd_seek): Ditto. * cache.c (bfd_cache_lookup_worker): Ditto. * archive.c (_bfd_get_elt_at_filepos): Remove code dealing with nested archives. (bfd_generic_openr_next_archived_file): Likewise.
This commit is contained in:
20
bfd/bfdio.c
20
bfd/bfdio.c
@@ -233,10 +233,14 @@ bfd_tell (bfd *abfd)
|
||||
|
||||
if (abfd->iovec)
|
||||
{
|
||||
bfd *parent_bfd = abfd;
|
||||
ptr = abfd->iovec->btell (abfd);
|
||||
|
||||
if (abfd->my_archive)
|
||||
ptr -= abfd->origin;
|
||||
while (parent_bfd->my_archive != NULL)
|
||||
{
|
||||
ptr -= parent_bfd->origin;
|
||||
parent_bfd = parent_bfd->my_archive;
|
||||
}
|
||||
}
|
||||
else
|
||||
ptr = 0;
|
||||
@@ -308,8 +312,16 @@ bfd_seek (bfd *abfd, file_ptr position, int direction)
|
||||
}
|
||||
|
||||
file_position = position;
|
||||
if (direction == SEEK_SET && abfd->my_archive != NULL)
|
||||
file_position += abfd->origin;
|
||||
if (direction == SEEK_SET)
|
||||
{
|
||||
bfd *parent_bfd = abfd;
|
||||
|
||||
while (parent_bfd->my_archive != NULL)
|
||||
{
|
||||
file_position += parent_bfd->origin;
|
||||
parent_bfd = parent_bfd->my_archive;
|
||||
}
|
||||
}
|
||||
|
||||
if (abfd->iovec)
|
||||
result = abfd->iovec->bseek (abfd, file_position, direction);
|
||||
|
||||
Reference in New Issue
Block a user