PR/136 - Have bfd_cache_lookup_worker() abort rather than return an

(unchecked-for) NULL.
This commit is contained in:
Nick Clifton 2004-05-05 15:39:11 +00:00
parent 6b6e92f432
commit 06fc8a8ce6
3 changed files with 35 additions and 26 deletions

View file

@ -1,3 +1,15 @@
2004-05-05 Nick Clifton <nickc@redhat.com>
PR/136
* cache.c (bfd_cache_lookup_worker): Call abort() rather than
returning NULL as most users of this function do not check its
return value.
2004-05-05 Nick Clifton <nickc@redhat.com>
* cache.c (bfd_cache_lookup): Improve formatting.
* archive.c: Fix formatting.
2004-05-05 Peter Barada <peter@the-baradas.com> 2004-05-05 Peter Barada <peter@the-baradas.com>
* bfd_archures.c(bfd_architecture): Add 521x,5249,547x,548x. * bfd_archures.c(bfd_architecture): Add 521x,5249,547x,548x.

View file

@ -221,7 +221,7 @@ bfd_get_next_mapent (bfd *abfd, symindex prev, carsym **entry)
return prev; return prev;
} }
/* To be called by backends only */ /* To be called by backends only. */
bfd * bfd *
_bfd_create_empty_archive_element_shell (bfd *obfd) _bfd_create_empty_archive_element_shell (bfd *obfd)
@ -261,7 +261,8 @@ _bfd_look_for_bfd_in_cache (bfd *arch_bfd, file_ptr filepos)
return NULL; return NULL;
} }
/* Kind of stupid to call cons for each one, but we don't do too many */ /* Kind of stupid to call cons for each one, but we don't do too many. */
bfd_boolean bfd_boolean
_bfd_add_bfd_to_archive_cache (bfd *arch_bfd, file_ptr filepos, bfd *new_elt) _bfd_add_bfd_to_archive_cache (bfd *arch_bfd, file_ptr filepos, bfd *new_elt)
{ {
@ -316,8 +317,7 @@ get_extended_arelt_filename (bfd *arch, const char *name)
Presumes the file pointer is already in the right place (ie pointing Presumes the file pointer is already in the right place (ie pointing
to the ar_hdr in the file). Moves the file pointer; on success it to the ar_hdr in the file). Moves the file pointer; on success it
should be pointing to the front of the file contents; on failure it should be pointing to the front of the file contents; on failure it
could have been moved arbitrarily. could have been moved arbitrarily. */
*/
void * void *
_bfd_generic_read_ar_hdr (bfd *abfd) _bfd_generic_read_ar_hdr (bfd *abfd)
@ -670,7 +670,7 @@ bfd_generic_archive_p (bfd *abfd)
/* The size of the string count. */ /* The size of the string count. */
#define BSD_STRING_COUNT_SIZE 4 #define BSD_STRING_COUNT_SIZE 4
/* Returns FALSE on error, TRUE otherwise */ /* Returns FALSE on error, TRUE otherwise. */
static bfd_boolean static bfd_boolean
do_slurp_bsd_armap (bfd *abfd) do_slurp_bsd_armap (bfd *abfd)
@ -901,8 +901,8 @@ bfd_slurp_armap (bfd *abfd)
return TRUE; return TRUE;
} }
/* Returns FALSE on error, TRUE otherwise */ /* Returns FALSE on error, TRUE otherwise. */
/* flavor 2 of a bsd armap, similar to bfd_slurp_bsd_armap except the /* Flavor 2 of a bsd armap, similar to bfd_slurp_bsd_armap except the
header is in a slightly different order and the map name is '/'. header is in a slightly different order and the map name is '/'.
This flavour is used by hp300hpux. */ This flavour is used by hp300hpux. */
@ -932,7 +932,7 @@ bfd_slurp_bsd_armap_f2 (bfd *abfd)
return FALSE; return FALSE;
if (!strncmp (nextname, "__.SYMDEF ", 16) if (!strncmp (nextname, "__.SYMDEF ", 16)
|| !strncmp (nextname, "__.SYMDEF/ ", 16)) /* old Linux archives */ || !strncmp (nextname, "__.SYMDEF/ ", 16)) /* Old Linux archives. */
return do_slurp_bsd_armap (abfd); return do_slurp_bsd_armap (abfd);
if (strncmp (nextname, "/ ", 16)) if (strncmp (nextname, "/ ", 16))
@ -1296,7 +1296,7 @@ _bfd_construct_extended_name_table (bfd *abfd,
return TRUE; return TRUE;
} }
/** A couple of functions for creating ar_hdrs */ /* A couple of functions for creating ar_hdrs. */
#ifdef HPUX_LARGE_AR_IDS #ifdef HPUX_LARGE_AR_IDS
/* Function to encode large UID/GID values according to HP. */ /* Function to encode large UID/GID values according to HP. */
@ -1765,9 +1765,9 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength)
bfd *current; bfd *current;
file_ptr elt_no = 0; file_ptr elt_no = 0;
struct orl *map = NULL; struct orl *map = NULL;
unsigned int orl_max = 1024; /* fine initial default */ unsigned int orl_max = 1024; /* Fine initial default. */
unsigned int orl_count = 0; unsigned int orl_count = 0;
int stridx = 0; /* string index */ int stridx = 0;
asymbol **syms = NULL; asymbol **syms = NULL;
long syms_max = 0; long syms_max = 0;
bfd_boolean ret; bfd_boolean ret;
@ -1916,7 +1916,7 @@ bsd_write_armap (bfd *arch,
unsigned int mapsize = ranlibsize + stringsize + 8; unsigned int mapsize = ranlibsize + stringsize + 8;
file_ptr firstreal; file_ptr firstreal;
bfd *current = arch->archive_head; bfd *current = arch->archive_head;
bfd *last_elt = current; /* last element arch seen */ bfd *last_elt = current; /* Last element arch seen. */
bfd_byte temp[4]; bfd_byte temp[4];
unsigned int count; unsigned int count;
struct ar_hdr hdr; struct ar_hdr hdr;
@ -1960,7 +1960,7 @@ bsd_write_armap (bfd *arch,
current = current->next; current = current->next;
} }
while (current != map[count].u.abfd); while (current != map[count].u.abfd);
} /* if new archive element */ }
last_elt = current; last_elt = current;
H_PUT_32 (arch, map[count].namidx, buf); H_PUT_32 (arch, map[count].namidx, buf);
@ -2058,8 +2058,7 @@ _bfd_archive_bsd_update_armap_timestamp (bfd *arch)
symbol name 0 symbol name 0
symbol name 1 symbol name 1
symbol name n-1 symbol name n-1 */
*/
bfd_boolean bfd_boolean
coff_write_armap (bfd *arch, coff_write_armap (bfd *arch,
@ -2104,7 +2103,6 @@ coff_write_armap (bfd *arch,
(((char *) (&hdr))[i]) = ' '; (((char *) (&hdr))[i]) = ' ';
/* Write the ar header for this item and the number of symbols. */ /* Write the ar header for this item and the number of symbols. */
if (bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch) if (bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch)
!= sizeof (struct ar_hdr)) != sizeof (struct ar_hdr))
return FALSE; return FALSE;

View file

@ -189,9 +189,9 @@ bfd *bfd_last_cache;
otherwise, it has to perform the complicated lookup function. otherwise, it has to perform the complicated lookup function.
.#define bfd_cache_lookup(x) \ .#define bfd_cache_lookup(x) \
. ((x)==bfd_last_cache? \ . ((x) == bfd_last_cache ? \
. (FILE*) (bfd_last_cache->iostream): \ . (FILE *) (bfd_last_cache->iostream): \
. bfd_cache_lookup_worker(x)) . bfd_cache_lookup_worker (x))
*/ */
@ -438,7 +438,8 @@ DESCRIPTION
quick answer. Find a file descriptor for @var{abfd}. If quick answer. Find a file descriptor for @var{abfd}. If
necessary, it open it. If there are already more than necessary, it open it. If there are already more than
<<BFD_CACHE_MAX_OPEN>> files open, it tries to close one first, to <<BFD_CACHE_MAX_OPEN>> files open, it tries to close one first, to
avoid running out of file descriptors. avoid running out of file descriptors. It will abort rather than
returning NULL if it is unable to (re)open the @var{abfd}.
*/ */
FILE * FILE *
@ -461,12 +462,10 @@ bfd_cache_lookup_worker (bfd *abfd)
} }
else else
{ {
if (bfd_open_file (abfd) == NULL) if (bfd_open_file (abfd) == NULL
return NULL; || abfd->where != (unsigned long) abfd->where
if (abfd->where != (unsigned long) abfd->where) || real_fseek ((FILE *) abfd->iostream, abfd->where, SEEK_SET) != 0)
return NULL; abort ();
if (real_fseek ((FILE *) abfd->iostream, abfd->where, SEEK_SET) != 0)
return NULL;
} }
return (FILE *) abfd->iostream; return (FILE *) abfd->iostream;