From e5b0286097763d2d80b8be2ef9202f5e31c791ae Mon Sep 17 00:00:00 2001 From: Ken Raeburn Date: Wed, 24 Mar 1993 05:09:18 +0000 Subject: [PATCH] fix some (not all) bugs in previous changes --- bfd/libbfd.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/bfd/libbfd.c b/bfd/libbfd.c index 75ce90e4324..e11f7940cc6 100644 --- a/bfd/libbfd.c +++ b/bfd/libbfd.c @@ -257,6 +257,7 @@ DEFUN(bfd_seek,(abfd, position, direction), { int result; FILE *f; + file_ptr file_position; /* For the time being, a BFD may not seek to it's end. The problem is that we don't easily have a way to recognize the end of an element in an archive. */ @@ -271,18 +272,26 @@ DEFUN(bfd_seek,(abfd, position, direction), #endif f = bfd_cache_lookup (abfd); + file_position = position; if (direction == SEEK_SET && abfd->my_archive != NULL) - { - /* This is a set within an archive, so we need to - add the base of the object within the archive */ - result = fseek (f, position + abfd->origin, direction); - } + file_position += abfd->origin; + + result = fseek (f, file_position, direction); + + if (result != 0) + /* Force redetermination of `where' field. */ + bfd_tell (abfd); else { - result = fseek (f, position, direction); +#ifdef FILE_OFFSET_IS_CHAR_INDEX + /* Adjust `where' field. */ + if (direction == SEEK_SET) + abfd->where = position; + else + abfd->where += position; +#endif } - /* Force redetermination of `where' field. */ - bfd_tell (abfd); + return result; } /** Make a string table */ -- 2.30.2