From ce271f82f16ee89a18e7bfc9ed8eab7cbd6f37bc Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Mon, 22 Sep 2025 23:38:21 +0200 Subject: Change io::Reader and company to return ReadError::Eof instead of 0. It's debatable if Eof should be considered an error or not. But it is pretty clear it generally is a special response that needs special handling, so easier to keep with the unexpected lot. Also keeps better at higher abstraction levels, such as the line reader. --- src/uline.cc | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) (limited to 'src/uline.cc') diff --git a/src/uline.cc b/src/uline.cc index 7d4c7c7..358f36c 100644 --- a/src/uline.cc +++ b/src/uline.cc @@ -30,7 +30,7 @@ class UnicodeReader { end_(buffer_.get() + check::add(max_len, static_cast(2))) {} [[nodiscard]] - std::expected, line::ReadError> read() { + std::expected, io::ReadError> read() { while (true) { search_ = std::find_first_of(search_, wptr_, line_terminators_.begin(), line_terminators_.end()); @@ -46,12 +46,11 @@ class UnicodeReader { if (search_ + 1 == wptr_) { make_space_if_needed(); auto got = fill(); - if (got.has_value()) { - if (got.value() == 0) { + if (!got.has_value()) { + if (got.error() == io::ReadError::Eof) { return line(search_ - rptr_, 1); } - } else { - return std::unexpected(line::ReadError(got.error())); + return std::unexpected(got.error()); } } if (search_[1] == line_terminators_[1]) { @@ -68,15 +67,11 @@ class UnicodeReader { make_space_if_needed(); auto got = fill(); - if (got.has_value()) { - if (got.value() == 0) { - if (rptr_ == wptr_) { - return std::unexpected(line::ReadError()); - } + if (!got.has_value()) { + if (got.error() == io::ReadError::Eof && rptr_ != wptr_) { return line(wptr_ - rptr_, 0); } - } else { - return std::unexpected(line::ReadError(got.error())); + return std::unexpected(got.error()); } } } @@ -138,7 +133,7 @@ class ReaderImpl : public UnicodeReader, {'\r', '\n'}) {} [[nodiscard]] - std::expected read() override { + std::expected read() override { return UnicodeReader::read(); } @@ -170,7 +165,7 @@ class ReaderImpl : public UnicodeReader, {u'\r', u'\n'}) {} [[nodiscard]] - std::expected read() override { + std::expected read() override { return UnicodeReader::read(); } -- cgit v1.3