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
- }
- 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
+ return 0, nil
}
- if blockLen == 0 {
- return 0, os.EOF
- }
- b.slice = b.tmp[0:blockLen]
- if _, err = io.ReadFull(b.r, b.slice); err != nil {
- 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
+ }
}
- 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.