1
0
mirror of https://github.com/golang/go synced 2024-11-22 00:34:40 -07:00

bufio: make Reader.Read implement io.Reader semantics

R=rsc
CC=golang-dev
https://golang.org/cl/3395042
This commit is contained in:
Roger Peppe 2010-12-07 14:54:15 -05:00 committed by Russ Cox
parent cf6c212197
commit 24a78a026d

View File

@ -128,16 +128,17 @@ func (b *Reader) Peek(n int) ([]byte, os.Error) {
// Read reads data into p.
// It returns the number of bytes read into p.
// If nn < len(p), also returns an error explaining
// why the read is short. At EOF, the count will be
// zero and err will be os.EOF.
func (b *Reader) Read(p []byte) (nn int, err os.Error) {
nn = 0
for len(p) > 0 {
n := len(p)
// It calls Read at most once on the underlying Reader,
// hence n may be less than len(p).
// At EOF, the count will be zero and err will be os.EOF.
func (b *Reader) Read(p []byte) (n int, err os.Error) {
n = len(p)
if n == 0 {
return 0, b.err
}
if b.w == b.r {
if b.err != nil {
return nn, b.err
return 0, b.err
}
if len(p) >= len(b.buf) {
// Large read, empty buffer.
@ -148,12 +149,14 @@ func (b *Reader) Read(p []byte) (nn int, err os.Error) {
b.lastRuneSize = -1
}
p = p[n:]
nn += n
continue
return n, b.err
}
b.fill()
continue
if b.w == b.r {
return 0, b.err
}
}
if n > b.w-b.r {
n = b.w - b.r
}
@ -162,9 +165,7 @@ func (b *Reader) Read(p []byte) (nn int, err os.Error) {
b.r += n
b.lastByte = int(b.buf[b.r-1])
b.lastRuneSize = -1
nn += n
}
return nn, nil
return n, nil
}
// ReadByte reads and returns a single byte.