]> Cypherpunks repositories - gostls13.git/commitdiff
bytes: fix UnreadByte failure after ReadBytes
authorStéphane Travostino <stephane.travostino@gmail.com>
Fri, 11 Jan 2013 06:02:21 +0000 (17:02 +1100)
committerDave Cheney <dave@cheney.net>
Fri, 11 Jan 2013 06:02:21 +0000 (17:02 +1100)
Fixes #4583.

R=golang-dev, minux.ma, bradfitz, rsc, dave
CC=golang-dev
https://golang.org/cl/6976050

src/pkg/bytes/buffer.go
src/pkg/bytes/buffer_test.go

index 3ae930384f6b14201b81199bdeba2c9fe3dd4d79..85c1577985d574543f940f8a690b0dd1669cb2df 100644 (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
 }
 
index 69b250773369b70ef3faec98ceca94cac35d589e..f9fb2625a0f39f1fbfe1df0728eeeb451657cc7b 100644 (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')
+       }
+}