Fix buglet in last patch.

This commit is contained in:
Ian Lance Taylor
2007-12-20 21:26:17 +00:00
parent fe8718a463
commit 8cce671843

View File

@ -208,11 +208,11 @@ File_read::find_view(off_t start, section_size_type size) const
void void
File_read::do_read(off_t start, section_size_type size, void* p) const File_read::do_read(off_t start, section_size_type size, void* p) const
{ {
section_size_type bytes; ssize_t bytes;
if (this->contents_ != NULL) if (this->contents_ != NULL)
{ {
bytes = this->size_ - start; bytes = this->size_ - start;
if (bytes >= size) if (static_cast<section_size_type>(bytes) >= size)
{ {
memcpy(p, this->contents_ + start, size); memcpy(p, this->contents_ + start, size);
return; return;
@ -220,16 +220,16 @@ File_read::do_read(off_t start, section_size_type size, void* p) const
} }
else else
{ {
ssize_t got = ::pread(this->descriptor_, p, size, start); bytes = ::pread(this->descriptor_, p, size, start);
if (got < 0) if (static_cast<section_size_type>(bytes) == size)
return;
if (bytes < 0)
{ {
gold_fatal(_("%s: pread failed: %s"), gold_fatal(_("%s: pread failed: %s"),
this->filename().c_str(), strerror(errno)); this->filename().c_str(), strerror(errno));
return; return;
} }
if (static_cast<section_size_type>(got) == size)
return;
} }
gold_fatal(_("%s: file too short: read only %lld of %lld bytes at %lld"), gold_fatal(_("%s: file too short: read only %lld of %lld bytes at %lld"),