diff options
author | Robert Griesemer <gri@golang.org> | 2011-09-21 14:47:00 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2011-09-21 14:47:00 -0700 |
commit | 3e02fff00712c3ab714b51c6b61fa6ac79d5275d (patch) | |
tree | 9777c8b1be26653b2f1978eb0c7f6980dec9ffc1 | |
parent | 91a48115bb7d773ac38f46e3127b6ca8a6c3e980 (diff) | |
download | go-3e02fff00712c3ab714b51c6b61fa6ac79d5275d.tar.gz go-3e02fff00712c3ab714b51c6b61fa6ac79d5275d.zip |
gob: slightly simpler decodeUint
R=r
CC=golang-dev
https://golang.org/cl/5089048
-rw-r--r-- | src/pkg/gob/decode.go | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/src/pkg/gob/decode.go b/src/pkg/gob/decode.go index 60c0e10cea..9d8d905874 100644 --- a/src/pkg/gob/decode.go +++ b/src/pkg/gob/decode.go @@ -70,13 +70,12 @@ func decodeUintReader(r io.Reader, buf []byte) (x uint64, width int, err os.Erro if b <= 0x7f { return uint64(b), width, nil } - nb := -int(int8(b)) - if nb > uint64Size { + n := -int(int8(b)) + if n > uint64Size { err = errBadUint return } - var n int - n, err = io.ReadFull(r, buf[0:nb]) + width, err = io.ReadFull(r, buf[0:n]) if err != nil { if err == os.EOF { err = io.ErrUnexpectedEOF @@ -84,11 +83,10 @@ func decodeUintReader(r io.Reader, buf []byte) (x uint64, width int, err os.Erro return } // Could check that the high byte is zero but it's not worth it. - for i := 0; i < n; i++ { - x <<= 8 - x |= uint64(buf[i]) - width++ + for _, b := range buf[0:width] { + x = x<<8 | uint64(b) } + width++ // +1 for length byte return } @@ -102,19 +100,18 @@ func (state *decoderState) decodeUint() (x uint64) { if b <= 0x7f { return uint64(b) } - nb := -int(int8(b)) - if nb > uint64Size { + n := -int(int8(b)) + if n > uint64Size { error(errBadUint) } - n, err := state.b.Read(state.buf[0:nb]) + width, err := state.b.Read(state.buf[0:n]) if err != nil { error(err) } // Don't need to check error; it's safe to loop regardless. // Could check that the high byte is zero but it's not worth it. - for i := 0; i < n; i++ { - x <<= 8 - x |= uint64(state.buf[i]) + for _, b := range state.buf[0:width] { + x = x<<8 | uint64(b) } return x } |