From: Ian Lance Taylor Date: Mon, 4 Apr 1994 22:41:53 +0000 (+0000) Subject: Made sure that every call to bfd_read, bfd_write, and bfd_seek X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2baa7d54a6a3a857fce2df0c4f4cd63715f84c29;p=binutils-gdb.git 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: * i386os9k.c (os9k_swap_exec_header_in): Change return type to boolean. (os9k_object_p): Check os9k_swap_exec_header_in return value. --- diff --git a/bfd/i386os9k.c b/bfd/i386os9k.c index eb6ee848b42..69a0f2d276d 100644 --- a/bfd/i386os9k.c +++ b/bfd/i386os9k.c @@ -30,7 +30,7 @@ static bfd_target *os9k_callback PARAMS ((bfd *)); /* Swaps the information in an executable header taken from a raw byte stream memory image, into the internal exec_header structure. */ -void +boolean os9k_swap_exec_header_in (abfd, raw_bytes, execp) bfd *abfd; mh_com *raw_bytes; @@ -50,9 +50,12 @@ os9k_swap_exec_header_in (abfd, raw_bytes, execp) dload = bfd_h_get_32 (abfd, bytes->m_idata); execp->a_data = dload + 8; - bfd_seek (abfd, (file_ptr) dload, SEEK_SET); - bfd_read (&dmemstart, sizeof (dmemstart), 1, abfd); - bfd_read (&dmemsize, sizeof (dmemsize), 1, abfd); + if (bfd_seek (abfd, (file_ptr) dload, SEEK_SET) != 0 + || (bfd_read (&dmemstart, sizeof (dmemstart), 1, abfd) + != sizeof (dmemstart)) + || (bfd_read (&dmemsize, sizeof (dmemsize), 1, abfd) + != sizeof (dmemsize))) + return false; execp->a_tload = 0; execp->a_dload = bfd_h_get_32 (abfd, (unsigned char *) &dmemstart); @@ -62,6 +65,8 @@ os9k_swap_exec_header_in (abfd, raw_bytes, execp) execp->a_trsize = 0; execp->a_drsize = 0; + + return true; } #if 0 @@ -109,7 +114,8 @@ os9k_object_p (abfd) if (bfd_read ((PTR) & exec_bytes, MHCOM_BYTES_SIZE, 1, abfd) != MHCOM_BYTES_SIZE) { - bfd_set_error (bfd_error_wrong_format); + if (bfd_get_error () != bfd_error_system_call) + bfd_set_error (bfd_error_wrong_format); return 0; } @@ -120,7 +126,12 @@ os9k_object_p (abfd) return 0; } - os9k_swap_exec_header_in (abfd, &exec_bytes, &anexec); + if (! os9k_swap_exec_header_in (abfd, &exec_bytes, &anexec)) + { + if (bfd_get_error () != bfd_error_system_call) + bfd_set_error (bfd_error_wrong_format); + return NULL; + } return aout_32_some_aout_object_p (abfd, &anexec, os9k_callback); } @@ -235,22 +246,30 @@ os9k_write_object_contents (abfd) bout_swap_exec_header_out (abfd, exec_hdr (abfd), &swapped_hdr); - bfd_seek (abfd, (file_ptr) 0, SEEK_SET); - bfd_write ((PTR) & swapped_hdr, 1, EXEC_BYTES_SIZE, abfd); + if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0 + || (bfd_write ((PTR) & swapped_hdr, 1, EXEC_BYTES_SIZE, abfd) + != EXEC_BYTES_SIZE)) + return false; /* Now write out reloc info, followed by syms and strings */ if (bfd_get_symcount (abfd) != 0) { - bfd_seek (abfd, (file_ptr) (N_SYMOFF (*exec_hdr (abfd))), SEEK_SET); + if (bfd_seek (abfd, (file_ptr) (N_SYMOFF (*exec_hdr (abfd))), SEEK_SET) + != 0) + return false; if (!aout_32_write_syms (abfd)) return false; - bfd_seek (abfd, (file_ptr) (N_TROFF (*exec_hdr (abfd))), SEEK_SET); + if (bfd_seek (abfd, (file_ptr) (N_TROFF (*exec_hdr (abfd))), SEEK_SET) + != 0) + return false; if (!b_out_squirt_out_relocs (abfd, obj_textsec (abfd))) return false; - bfd_seek (abfd, (file_ptr) (N_DROFF (*exec_hdr (abfd))), SEEK_SET); + if (bfd_seek (abfd, (file_ptr) (N_DROFF (*exec_hdr (abfd))), SEEK_SET) + != 0) + return false; if (!b_out_squirt_out_relocs (abfd, obj_datasec (abfd))) return false; @@ -282,7 +301,8 @@ os9k_set_section_contents (abfd, section, location, offset, count) } /* regardless, once we know what we're doing, we might as well get going */ - bfd_seek (abfd, section->filepos + offset, SEEK_SET); + if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0) + return false; if (count != 0) {