mirror of
https://github.com/golang/go
synced 2024-11-21 18:54:43 -07:00
image/gif: simplify blockReader.Read.
Inverting the tests avoids recursion and simplifies the flow. R=nigeltao CC=golang-dev https://golang.org/cl/4551057
This commit is contained in:
parent
f5a011dd0c
commit
4c945c2cfc
@ -94,28 +94,26 @@ type blockReader struct {
|
||||
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 {
|
||||
return
|
||||
return 0, nil
|
||||
}
|
||||
if len(b.slice) > 0 {
|
||||
n = copy(p, b.slice)
|
||||
b.slice = b.slice[n:]
|
||||
return
|
||||
if len(b.slice) == 0 {
|
||||
blockLen, err := b.r.ReadByte()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
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
|
||||
}
|
||||
}
|
||||
var blockLen uint8
|
||||
blockLen, err = b.r.ReadByte()
|
||||
if 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
|
||||
}
|
||||
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.
|
||||
|
Loading…
Reference in New Issue
Block a user