summaryrefslogtreecommitdiff
path: root/src/pkg/gob/decoder.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/gob/decoder.go')
-rw-r--r--src/pkg/gob/decoder.go17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/pkg/gob/decoder.go b/src/pkg/gob/decoder.go
index 91bfcbbb8..b4c0acdfa 100644
--- a/src/pkg/gob/decoder.go
+++ b/src/pkg/gob/decoder.go
@@ -64,11 +64,11 @@ func (dec *Decoder) Decode(e interface{}) os.Error {
dec.state.err = nil;
for {
// Read a count.
- nbytes, err := decodeUintReader(dec.r, dec.oneByte);
- if err != nil {
- return err;
+ var nbytes uint64;
+ nbytes, dec.state.err = decodeUintReader(dec.r, dec.oneByte);
+ if dec.state.err != nil {
+ break;
}
-
// Allocate the buffer.
if nbytes > uint64(len(dec.buf)) {
dec.buf = make([]byte, nbytes + 1000);
@@ -77,12 +77,13 @@ func (dec *Decoder) Decode(e interface{}) os.Error {
// Read the data
var n int;
- n, err = dec.r.Read(dec.buf[0:nbytes]);
- if err != nil {
- return err;
+ n, dec.state.err = io.ReadFull(dec.r, dec.buf[0:nbytes]);
+ if dec.state.err != nil {
+ break;
}
if n < int(nbytes) {
- return os.ErrorString("gob decode: short read");
+ dec.state.err = io.ErrUnexpectedEOF;
+ break;
}
// Receive a type id.