From af6837f249848014e1d8fa2c0bb10e1da66c2ab4 Mon Sep 17 00:00:00 2001 From: "lightclient@protonmail.com" Date: Mon, 5 Jun 2023 09:48:55 +0200 Subject: [PATCH] internal/era/e2store: avoid double allocation during write --- internal/era/e2store/e2store.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/era/e2store/e2store.go b/internal/era/e2store/e2store.go index e1a85f6bc4..da8a3c7e99 100644 --- a/internal/era/e2store/e2store.go +++ b/internal/era/e2store/e2store.go @@ -50,11 +50,17 @@ func NewWriter(w io.Writer) *Writer { // record store the type (2 bytes), the length (4 bytes), and some reserved // data (2 bytes). The remaining bytes store b. func (w *Writer) Write(typ uint16, b []byte) (int, error) { - buf := make([]byte, headerSize+len(b)) + buf := make([]byte, headerSize) binary.LittleEndian.PutUint16(buf, typ) binary.LittleEndian.PutUint32(buf[2:], uint32(len(b))) - copy(buf[8:], b) - return w.w.Write(buf) + + // Write header. + if n, err := w.w.Write(buf); err != nil { + return n, err + } + // Write value, return combined write size. + n, err := w.w.Write(b) + return n + headerSize, err } // A Reader reads entries from an e2store-encoded file.