diff options
author | Alan Modra <amodra@gmail.com> | 2005-10-27 04:06:35 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2005-10-27 04:06:35 +0000 |
commit | 182a009999e52ae9e397fa0a628b52027b232e3d (patch) | |
tree | 42c587e514740b05f8d590ab6a2f3d13e4b001ac | |
parent | d00967c705a7d4139f55d8fbbd4dd5560eba9cd2 (diff) | |
download | gdb-182a009999e52ae9e397fa0a628b52027b232e3d.zip gdb-182a009999e52ae9e397fa0a628b52027b232e3d.tar.gz gdb-182a009999e52ae9e397fa0a628b52027b232e3d.tar.bz2 |
* bfdwin.c (bfd_get_file_window): Seek into file in place of
using bfd_cache_lookup.
-rw-r--r-- | bfd/ChangeLog | 3 | ||||
-rw-r--r-- | bfd/bfdwin.c | 13 |
2 files changed, 11 insertions, 5 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ca0a483..b3b6906 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,8 @@ 2005-10-27 Alan Modra <amodra@bigpond.net.au> + * bfdwin.c (bfd_get_file_window): Seek into file in place of + using bfd_cache_lookup. + * cache.c (BFD_CACHE_MAX_OPEN): Make private to this file. (bfd_last_cache, bfd_cache_lookup, bfd_cache_lookup_worker): Likewise. * libbfd-in.h (bfd_cache_lookup_worker, bfd_last_cache): Delete. diff --git a/bfd/bfdwin.c b/bfd/bfdwin.c index 1450ab0..7236906 100644 --- a/bfd/bfdwin.c +++ b/bfd/bfdwin.c @@ -1,5 +1,6 @@ /* Support for memory-mapped windows into a BFD. - Copyright 1995, 1996, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright 1995, 1996, 2001, 2002, 2003, 2005 + Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -144,7 +145,6 @@ bfd_get_file_window (bfd *abfd, file_ptr file_offset, offset2; size_t real_size; int fd; - FILE *f; /* Find the real file and the real offset into it. */ while (abfd->my_archive != NULL) @@ -152,10 +152,13 @@ bfd_get_file_window (bfd *abfd, offset += abfd->origin; abfd = abfd->my_archive; } - f = bfd_cache_lookup (abfd); - if (f == NULL) + + /* Seek into the file, to ensure it is open if cacheable. */ + if (abfd->iostream == NULL + && (abfd->iovec == NULL + || abfd->iovec->bseek (abfd, offset, SEEK_SET) != 0)) return FALSE; - fd = fileno (f); + fd = fileno ((FILE *) abfd->iostream); /* Compute offsets and size for mmap and for the user's data. */ offset2 = offset % pagesize; |