From 45ca5d60383cbe270624c713b916da29af7ba88f Mon Sep 17 00:00:00 2001 From: Jeff Halter <868228+jhalter@users.noreply.github.com> Date: Mon, 17 Jun 2024 13:50:28 -0700 Subject: Fix io.Reader implementations and wrap more errors --- hotline/file_header.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'hotline/file_header.go') diff --git a/hotline/file_header.go b/hotline/file_header.go index 71a1c00..469f321 100644 --- a/hotline/file_header.go +++ b/hotline/file_header.go @@ -10,6 +10,8 @@ type FileHeader struct { Size [2]byte // Total size of FileHeader payload Type [2]byte // 0 for file, 1 for dir FilePath []byte // encoded file path + + readOffset int // Internal offset to track read progress } func NewFileHeader(fileName string, isDir bool) FileHeader { @@ -28,10 +30,18 @@ func NewFileHeader(fileName string, isDir bool) FileHeader { } func (fh *FileHeader) Read(p []byte) (int, error) { - return copy(p, slices.Concat( + buf := slices.Concat( fh.Size[:], fh.Type[:], fh.FilePath, - ), - ), io.EOF + ) + + if fh.readOffset >= len(buf) { + return 0, io.EOF // All bytes have been read + } + + n := copy(p, buf[fh.readOffset:]) + fh.readOffset += n + + return n, nil } -- cgit