summaryrefslogtreecommitdiff
path: root/src/java_uescape.cc
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2025-09-22 23:38:21 +0200
committerJoel Klinghed <the_jk@spawned.biz>2025-09-22 23:38:21 +0200
commitce271f82f16ee89a18e7bfc9ed8eab7cbd6f37bc (patch)
tree3e568faf83ae750aa244cca87b55951c7401ef03 /src/java_uescape.cc
parent50348284f5d82ccfd65b0c803ba0ba895912ceff (diff)
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.
Diffstat (limited to 'src/java_uescape.cc')
-rw-r--r--src/java_uescape.cc15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/java_uescape.cc b/src/java_uescape.cc
index 925b050..3951b5f 100644
--- a/src/java_uescape.cc
+++ b/src/java_uescape.cc
@@ -46,9 +46,8 @@ class UnicodeEscapeReader {
if (fill_ == 0) {
// Optimize for the case when there are no unicode escapes.
auto ret = reader_->read(dst, max);
- if (!ret.has_value() || ret.value() == 0) {
+ if (!ret.has_value())
return ret;
- }
eof = false;
state.rstart = reinterpret_cast<T*>(dst);
@@ -63,10 +62,14 @@ class UnicodeEscapeReader {
auto ret = reader_->read(buffer_.get() + fill_,
(kBufferSize - fill_) * sizeof(T));
if (!ret.has_value()) {
- return ret;
+ if (ret.error() != io::ReadError::Eof) {
+ return ret;
+ }
+ eof = true;
+ } else {
+ eof = false;
+ fill_ += ret.value() / sizeof(T);
}
- eof = ret.value() == 0;
- fill_ += ret.value() / sizeof(T);
state.rstart = buffer_.get();
state.rend = buffer_.get() + fill_;
@@ -228,7 +231,7 @@ class UnicodeEscapeReader {
fill_ += avail;
}
- // We can't return zero, that is treated as EOF, we need to read more.
+ // We shouldn't return zero, we should read more if we can.
if (state.wptr == state.wstart) {
if (fill_ > 0) {
return read(state.wstart, (state.wend - state.wstart) * sizeof(T));