]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/file_name_with_info.go
Replace hardcoded version with ldflag usage
[rbdr/mobius] / hotline / file_name_with_info.go
index f230856d27e57c366da4860ae629ad02e340412c..4d59dd038bd8aef6e0aa8d274809d57dc45fcf3d 100644 (file)
@@ -3,11 +3,13 @@ package hotline
 import (
        "bytes"
        "encoding/binary"
+       "io"
+       "slices"
 )
 
 type FileNameWithInfo struct {
        fileNameWithInfoHeader
-       name []byte // File name
+       Name []byte // File Name
 }
 
 // fileNameWithInfoHeader contains the fixed length fields of FileNameWithInfo
@@ -17,35 +19,35 @@ type fileNameWithInfoHeader struct {
        FileSize   [4]byte // File Size in bytes
        RSVD       [4]byte
        NameScript [2]byte // ??
-       NameSize   [2]byte // Length of name field
+       NameSize   [2]byte // Length of Name field
 }
 
 func (f *fileNameWithInfoHeader) nameLen() int {
        return int(binary.BigEndian.Uint16(f.NameSize[:]))
 }
 
-func (f *FileNameWithInfo) MarshalBinary() (data []byte, err error) {
-       var buf bytes.Buffer
-       err = binary.Write(&buf, binary.LittleEndian, f.fileNameWithInfoHeader)
-       if err != nil {
-               return data, err
-       }
-
-       _, err = buf.Write(f.name)
-       if err != nil {
-               return data, err
-       }
-
-       return buf.Bytes(), err
+// Read implements io.Reader for FileNameWithInfo
+func (f *FileNameWithInfo) Read(b []byte) (int, error) {
+       return copy(b,
+               slices.Concat(
+                       f.Type[:],
+                       f.Creator[:],
+                       f.FileSize[:],
+                       f.RSVD[:],
+                       f.NameScript[:],
+                       f.NameSize[:],
+                       f.Name,
+               ),
+       ), io.EOF
 }
 
-func (f *FileNameWithInfo) UnmarshalBinary(data []byte) error {
-       err := binary.Read(bytes.NewReader(data), binary.BigEndian, &f.fileNameWithInfoHeader)
+func (f *FileNameWithInfo) Write(p []byte) (int, error) {
+       err := binary.Read(bytes.NewReader(p), binary.BigEndian, &f.fileNameWithInfoHeader)
        if err != nil {
-               return err
+               return 0, err
        }
        headerLen := binary.Size(f.fileNameWithInfoHeader)
-       f.name = data[headerLen : headerLen+f.nameLen()]
+       f.Name = p[headerLen : headerLen+f.nameLen()]
 
-       return err
+       return len(p), nil
 }