Commit 4c945c2c authored by Rob Pike's avatar Rob Pike

image/gif: simplify blockReader.Read.

Inverting the tests avoids recursion and simplifies the flow.

R=nigeltao
CC=golang-dev
https://golang.org/cl/4551057
parent f5a011dd
...@@ -94,28 +94,26 @@ type blockReader struct { ...@@ -94,28 +94,26 @@ type blockReader struct {
tmp [256]byte tmp [256]byte
} }
func (b *blockReader) Read(p []byte) (n int, err os.Error) { func (b *blockReader) Read(p []byte) (int, os.Error) {
if len(p) == 0 { if len(p) == 0 {
return return 0, nil
}
if len(b.slice) > 0 {
n = copy(p, b.slice)
b.slice = b.slice[n:]
return
}
var blockLen uint8
blockLen, err = b.r.ReadByte()
if err != nil {
return
} }
if blockLen == 0 { if len(b.slice) == 0 {
return 0, os.EOF blockLen, err := b.r.ReadByte()
} if err != nil {
b.slice = b.tmp[0:blockLen] return 0, err
if _, err = io.ReadFull(b.r, b.slice); err != nil { }
return if blockLen == 0 {
return 0, os.EOF
}
b.slice = b.tmp[0:blockLen]
if _, err = io.ReadFull(b.r, b.slice); err != nil {
return 0, err
}
} }
return b.Read(p) n := copy(p, b.slice)
b.slice = b.slice[n:]
return n, nil
} }
// decode reads a GIF image from r and stores the result in d. // decode reads a GIF image from r and stores the result in d.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment