-func (f flattenedFileObject) BinaryMarshal() []byte {
- var out []byte
- out = append(out, f.FlatFileHeader.Format[:]...)
- out = append(out, f.FlatFileHeader.Version[:]...)
- out = append(out, f.FlatFileHeader.RSVD[:]...)
- out = append(out, f.FlatFileHeader.ForkCount[:]...)
+// Read implements the io.Reader interface for flattenedFileObject
+func (ffo *flattenedFileObject) Read(p []byte) (int, error) {
+ buf := slices.Concat(
+ ffo.FlatFileHeader.Format[:],
+ ffo.FlatFileHeader.Version[:],
+ ffo.FlatFileHeader.RSVD[:],
+ ffo.FlatFileHeader.ForkCount[:],
+ []byte("INFO"),
+ []byte{0, 0, 0, 0},
+ make([]byte, 4),
+ ffo.FlatFileInformationFork.DataSize(),
+ ffo.FlatFileInformationFork.Platform[:],
+ ffo.FlatFileInformationFork.TypeSignature[:],
+ ffo.FlatFileInformationFork.CreatorSignature[:],
+ ffo.FlatFileInformationFork.Flags[:],
+ ffo.FlatFileInformationFork.PlatformFlags[:],
+ ffo.FlatFileInformationFork.RSVD[:],
+ ffo.FlatFileInformationFork.CreateDate[:],
+ ffo.FlatFileInformationFork.ModifyDate[:],
+ ffo.FlatFileInformationFork.NameScript[:],
+ ffo.FlatFileInformationFork.ReadNameSize(),
+ ffo.FlatFileInformationFork.Name,
+ ffo.FlatFileInformationFork.CommentSize[:],
+ ffo.FlatFileInformationFork.Comment,
+ ffo.FlatFileDataForkHeader.ForkType[:],
+ ffo.FlatFileDataForkHeader.CompressionType[:],
+ ffo.FlatFileDataForkHeader.RSVD[:],
+ ffo.FlatFileDataForkHeader.DataSize[:],
+ )
+
+ if ffo.readOffset >= len(buf) {
+ return 0, io.EOF // All bytes have been read
+ }
+
+ n := copy(p, buf[ffo.readOffset:])
+ ffo.readOffset += n