commit cc245b0e4697a388d4f1ee8a9e09507cef8135c2
parent dd3bc129dd64a8ed3b9175610fc9f756bcd8b065
Author: francoispqt <francois@parquet.ninja>
Date: Thu, 3 May 2018 00:14:43 +0800
improve io.Reader handling in decoder
Diffstat:
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/decode.go b/decode.go
@@ -291,14 +291,18 @@ func (dec *Decoder) read() bool {
copy(Buf, dec.data)
dec.data = Buf
}
- n, err := dec.r.Read(dec.data[dec.length:])
- if err != nil {
- dec.err = err
- return false
- } else if n == 0 {
- return false
+ bRead := 0
+ for bRead == 0 {
+ n, err := dec.r.Read(dec.data[dec.length:])
+ if err != nil {
+ if err != io.EOF {
+ dec.err = err
+ }
+ return false
+ }
+ bRead = n
}
- dec.length = dec.length + n
+ dec.length = dec.length + bRead
return true
}
return false
diff --git a/decode_stream_test.go b/decode_stream_test.go
@@ -2,6 +2,7 @@ package gojay
import (
"context"
+ "io"
"testing"
"time"
@@ -355,7 +356,7 @@ func (r *StreamReader) Read(b []byte) (int, error) {
n := copy(b, v)
return n, nil
case <-r.done:
- return 0, nil
+ return 0, io.EOF
}
}