ret += len1
off += len1
}
+ // Ensure that ret hasn't exceeded our original max.
+ if max < 0 {
+ ret += max
+ }
return
}
func (r *Reader) Read(b []byte) (n int, err error) {
n, err = r.readAt(b, r.pos)
r.pos += int64(n)
- if n != 0 && err == io.ErrUnexpectedEOF {
- err = nil
- }
return
}
if int64(len(b)) > maxLen {
b = b[:maxLen]
}
+again:
r.raisePriorities(pos, len(b))
for !r.readable(pos) {
r.raisePriorities(pos, len(b))
}
avail := r.available(pos, int64(len(b)))
// log.Println("available", avail)
- if int64(len(b)) > avail {
- b = b[:avail]
+ b1 := b[:avail]
+ n, err = dataReadAt(r.t.data, b1, pos)
+ if n != 0 {
+ err = nil
+ return
+ }
+ if err == io.ErrUnexpectedEOF {
+ goto again
}
- n, err = dataReadAt(r.t.data, b, pos)
return
}