gofrontend: correct file reading logic in Stream_from_file
The implementation of Stream_from_file mishandled several cases: * It reversed the check for whether bytes were already available in the peek buffer. * It considered positive return values from lseek to be an error, when only a -1 return value indicates an error. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/259437
This commit is contained in:
parent
7e9282ae62
commit
7164745e1c
@ -1,4 +1,4 @@
|
||||
801c458a562d22260ff176c26d65639dd32c8a90
|
||||
d00febdab0535546ccbf1ef634be1f23b09c8b77
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
@ -1487,7 +1487,7 @@ Stream_from_file::~Stream_from_file()
|
||||
bool
|
||||
Stream_from_file::do_peek(size_t length, const char** bytes)
|
||||
{
|
||||
if (this->data_.length() <= length)
|
||||
if (this->data_.length() >= length)
|
||||
{
|
||||
*bytes = this->data_.data();
|
||||
return true;
|
||||
@ -1504,7 +1504,7 @@ Stream_from_file::do_peek(size_t length, const char** bytes)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (lseek(this->fd_, - got, SEEK_CUR) != 0)
|
||||
if (lseek(this->fd_, - got, SEEK_CUR) < 0)
|
||||
{
|
||||
if (!this->saw_error())
|
||||
go_fatal_error(Linemap::unknown_location(), "lseek failed: %m");
|
||||
@ -1524,7 +1524,7 @@ Stream_from_file::do_peek(size_t length, const char** bytes)
|
||||
void
|
||||
Stream_from_file::do_advance(size_t skip)
|
||||
{
|
||||
if (lseek(this->fd_, skip, SEEK_CUR) != 0)
|
||||
if (lseek(this->fd_, skip, SEEK_CUR) < 0)
|
||||
{
|
||||
if (!this->saw_error())
|
||||
go_fatal_error(Linemap::unknown_location(), "lseek failed: %m");
|
||||
@ -1532,7 +1532,7 @@ Stream_from_file::do_advance(size_t skip)
|
||||
}
|
||||
if (!this->data_.empty())
|
||||
{
|
||||
if (this->data_.length() < skip)
|
||||
if (this->data_.length() > skip)
|
||||
this->data_.erase(0, skip);
|
||||
else
|
||||
this->data_.clear();
|
||||
|
Loading…
x
Reference in New Issue
Block a user