From 791a3db4a64ca11af2d68a25467bf51a23d03c8f Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 4 Apr 1994 22:41:21 +0000 Subject: [PATCH] Made sure that every call to bfd_read, bfd_write, and bfd_seek checks the return value and handled bfd_error correctly. These changes are not itemised. Also: * coffcode.h (coff_write_relocs): Change return type to boolean, and return errors. (coff_write_object_contents): Check coff_write_relocs return value. --- bfd/coffcode.h | 49 +++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/bfd/coffcode.h b/bfd/coffcode.h index f3204508314..445ce5b4c40 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -1045,7 +1045,7 @@ SUBSUBSECTION */ -static void +static boolean coff_write_relocs (abfd) bfd * abfd; { @@ -1056,7 +1056,8 @@ coff_write_relocs (abfd) struct external_reloc dst; arelent **p = s->orelocation; - bfd_seek (abfd, s->rel_filepos, SEEK_SET); + if (bfd_seek (abfd, s->rel_filepos, SEEK_SET) != 0) + return false; for (i = 0; i < s->reloc_count; i++) { struct internal_reloc n; @@ -1100,9 +1101,12 @@ coff_write_relocs (abfd) n.r_type = q->howto->type; #endif coff_swap_reloc_out (abfd, &n, &dst); - bfd_write ((PTR) & dst, 1, RELSZ, abfd); + if (bfd_write ((PTR) & dst, 1, RELSZ, abfd) != RELSZ) + return false; } } + + return true; } /* Set flags and magic number of a coff file from architecture and machine @@ -1558,10 +1562,12 @@ coff_write_object_contents (abfd) /* Write section headers to the file. */ internal_f.f_nscns = 0; - bfd_seek (abfd, - (file_ptr) ((abfd->flags & EXEC_P) ? - (FILHSZ + AOUTSZ) : FILHSZ), - SEEK_SET); + if (bfd_seek (abfd, + (file_ptr) ((abfd->flags & EXEC_P) ? + (FILHSZ + AOUTSZ) : FILHSZ), + SEEK_SET) + != 0) + return false; { #if 0 @@ -1641,7 +1647,8 @@ coff_write_object_contents (abfd) SCNHDR buff; coff_swap_scnhdr_out (abfd, §ion, &buff); - bfd_write ((PTR) (&buff), 1, SCNHSZ, abfd); + if (bfd_write ((PTR) (&buff), 1, SCNHSZ, abfd) != SCNHSZ) + return false; } @@ -1770,9 +1777,10 @@ coff_write_object_contents (abfd) coff_mangle_symbols (abfd); if (! coff_write_symbols (abfd)) return false; - if (!coff_write_linenumbers (abfd)) + if (! coff_write_linenumbers (abfd)) + return false; + if (! coff_write_relocs (abfd)) return false; - coff_write_relocs (abfd); } if (text_sec) { @@ -1798,13 +1806,15 @@ coff_write_object_contents (abfd) { FILHDR buff; coff_swap_filehdr_out (abfd, (PTR) & internal_f, (PTR) & buff); - bfd_write ((PTR) & buff, 1, FILHSZ, abfd); + if (bfd_write ((PTR) & buff, 1, FILHSZ, abfd) != FILHSZ) + return false; } if (abfd->flags & EXEC_P) { AOUTHDR buff; coff_swap_aouthdr_out (abfd, (PTR) & internal_a, (PTR) & buff); - bfd_write ((PTR) & buff, 1, AOUTSZ, abfd); + if (bfd_write ((PTR) & buff, 1, AOUTSZ, abfd) != AOUTSZ) + return false; } return true; } @@ -1834,7 +1844,8 @@ coff_set_section_contents (abfd, section, location, offset, count) if (section->filepos == 0) return true; - bfd_seek (abfd, (file_ptr) (section->filepos + offset), SEEK_SET); + if (bfd_seek (abfd, (file_ptr) (section->filepos + offset), SEEK_SET) != 0) + return false; if (count != 0) { @@ -1883,12 +1894,9 @@ buy_and_read (abfd, where, seek_direction, size) bfd_set_error (bfd_error_no_memory); return (NULL); } - bfd_seek (abfd, where, seek_direction); - if (bfd_read (area, 1, size, abfd) != size) - { - bfd_set_error (bfd_error_system_call); - return (NULL); - } /* on error */ + if (bfd_seek (abfd, where, seek_direction) != 0 + || bfd_read (area, 1, size, abfd) != size) + return (NULL); return (area); } /* buy_and_read() */ @@ -1984,7 +1992,8 @@ coff_slurp_symbol_table (abfd) unsigned int number_of_symbols = 0; if (obj_symbols (abfd)) return true; - bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET); + if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0) + return false; /* Read in the symbol table */ if ((native_symbols = coff_get_normalized_symtab (abfd)) == NULL) -- 2.30.2