mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-28 15:18:37 +08:00
gold/
* 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:
@ -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,
|
||||
|
Reference in New Issue
Block a user