* testsuite/binary_unittest.cc (read_all): New function.
	(Sized_binary_test): Use it instead of ::read.
	* fileread.cc (do_read): Don't assume pread always reads the whole
	amount in a single call.
This commit is contained in:
Roland McGrath
2012-12-10 17:38:42 +00:00
parent 8b9737bf8c
commit 4c8a1de1fe
3 changed files with 63 additions and 22 deletions

View File

@ -38,6 +38,29 @@
#include "test.h"
#include "testfile.h"
namespace
{
ssize_t
read_all (int fd, unsigned char* buf, ssize_t size)
{
ssize_t total_read = 0;
while (size > 0)
{
ssize_t nread = ::read(fd, buf, size);
if (nread < 0)
return nread;
if (nread == 0)
break;
buf += nread;
size -= nread;
total_read += nread;
}
return total_read;
}
} // End anonymous namespace.
namespace gold_testsuite
{
@ -57,7 +80,7 @@ Sized_binary_test()
int o = open_descriptor(-1, gold::program_name, O_RDONLY);
CHECK(o >= 0);
unsigned char* filedata = new unsigned char[st.st_size];
CHECK(::read(o, filedata, st.st_size) == st.st_size);
CHECK(read_all(o, filedata, st.st_size) == static_cast<ssize_t>(st.st_size));
CHECK(::close(o) == 0);
Binary_to_elf binary(static_cast<elfcpp::EM>(0xffff), size, big_endian,