Description: archive/tar: reuse temporary buffer in readHeader Author: Cristian Staretu Last-Update: 2014-07-03 Forwarded: not-needed Origin: vendor, https://code.google.com/p/go/source/detail?r=17404efd6b02d4b3acd17070e3f89de97a145877 --- diff -r 837348e418f3 -r 17404efd6b02 src/pkg/archive/tar/reader.go --- a/src/pkg/archive/tar/reader.go Thu Jul 03 09:40:53 2014 +1000 +++ b/src/pkg/archive/tar/reader.go Thu Jul 03 09:41:19 2014 +1000 @@ -29,10 +29,11 @@ // The Next method advances to the next file in the archive (including the first), // and then it can be treated as an io.Reader to access the file's data. type Reader struct { - r io.Reader - err error - pad int64 // amount of padding (ignored) after current file entry - curr numBytesReader // reader for current file entry + r io.Reader + err error + pad int64 // amount of padding (ignored) after current file entry + curr numBytesReader // reader for current file entry + hdrBuff [blockSize]byte // buffer to use in readHeader } // A numBytesReader is an io.Reader with a numBytes method, returning the number @@ -426,7 +427,9 @@ } func (tr *Reader) readHeader() *Header { - header := make([]byte, blockSize) + header := tr.hdrBuff[:] + copy(header, zeroBlock) + if _, tr.err = io.ReadFull(tr.r, header); tr.err != nil { return nil }