From 4c945c2cfc29ccc607f2f606053953813cd0c4b6 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Tue, 24 May 2011 11:02:44 +1000 Subject: [PATCH] image/gif: simplify blockReader.Read. Inverting the tests avoids recursion and simplifies the flow. R=nigeltao CC=golang-dev https://golang.org/cl/4551057 --- src/pkg/image/gif/reader.go | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/pkg/image/gif/reader.go b/src/pkg/image/gif/reader.go index 5dd404036c..4de18c323b 100644 --- a/src/pkg/image/gif/reader.go +++ b/src/pkg/image/gif/reader.go @@ -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 - } - 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. -- 2.48.1