X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/9cf66aeafbcbb9237fedc2efc97cc2856eb60f7f..a2ef262a164fc735b9b8471ac0c8001eea2b9bf6:/hotline/file_header.go?ds=inline diff --git a/hotline/file_header.go b/hotline/file_header.go index 71a1c00..b18229a 100644 --- a/hotline/file_header.go +++ b/hotline/file_header.go @@ -10,11 +10,12 @@ 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 { fh := FileHeader{ - Type: [2]byte{0x00, 0x00}, FilePath: EncodeFilePath(fileName), } if isDir { @@ -28,10 +29,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 }