From 182a009999e52ae9e397fa0a628b52027b232e3d Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 27 Oct 2005 04:06:35 +0000 Subject: [PATCH] * bfdwin.c (bfd_get_file_window): Seek into file in place of using bfd_cache_lookup. --- bfd/ChangeLog | 3 +++ bfd/bfdwin.c | 13 ++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ca0a483fda1..b3b6906d53b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,8 @@ 2005-10-27 Alan Modra + * 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 1450ab0e969..7236906e28b 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; -- 2.30.2