1
0
mirror of https://github.com/golang/go synced 2024-11-23 00:20:12 -07:00

bytes: fix UnreadByte failure after ReadBytes

Fixes #4583.

R=golang-dev, minux.ma, bradfitz, rsc, dave
CC=golang-dev
https://golang.org/cl/6976050
This commit is contained in:
Stéphane Travostino 2013-01-11 17:02:21 +11:00 committed by Dave Cheney
parent 9ae7f34084
commit 53e342f648
2 changed files with 24 additions and 1 deletions

View File

@ -367,7 +367,7 @@ func (b *Buffer) ReadBytes(delim byte) (line []byte, err error) {
return
}
// readSlice is like readBytes but returns a reference to internal buffer data.
// readSlice is like ReadBytes but returns a reference to internal buffer data.
func (b *Buffer) readSlice(delim byte) (line []byte, err error) {
i := IndexByte(b.buf[b.off:], delim)
end := b.off + i + 1
@ -377,6 +377,7 @@ func (b *Buffer) readSlice(delim byte) (line []byte, err error) {
}
line = b.buf[b.off:end]
b.off = end
b.lastRead = opRead
return line, err
}

View File

@ -453,3 +453,25 @@ func TestReadEmptyAtEOF(t *testing.T) {
t.Errorf("wrong count; got %d want 0", n)
}
}
func TestUnreadByte(t *testing.T) {
b := new(Buffer)
b.WriteString("abcdefghijklmnopqrstuvwxyz")
_, err := b.ReadBytes('m')
if err != nil {
t.Fatalf("ReadBytes: %v", err)
}
err = b.UnreadByte()
if err != nil {
t.Fatalf("UnreadByte: %v", err)
}
c, err := b.ReadByte()
if err != nil {
t.Fatalf("ReadByte: %v", err)
}
if c != 'm' {
t.Errorf("ReadByte = %q; want %q", c, 'm')
}
}