- nameEnd := 112 + bs
-
- commentSize := bytes[nameEnd : nameEnd+2]
- commentLen := binary.BigEndian.Uint16(commentSize)
-
- commentStartPos := int(nameEnd) + 2
- commentEndPos := int(nameEnd) + 2 + int(commentLen)
-
- comment := bytes[commentStartPos:commentEndPos]
-
- //dataSizeField := bytes[nameEnd+14+commentLen : nameEnd+18+commentLen]
- //dataSize := binary.BigEndian.Uint32(dataSizeField)
-
- ffo := flattenedFileObject{
- FlatFileHeader: FlatFileHeader{
- Format: bytes[0:4],
- Version: bytes[4:6],
- RSVD: bytes[6:22],
- ForkCount: bytes[22:24],
- },
- FlatFileInformationForkHeader: FlatFileInformationForkHeader{
- ForkType: bytes[24:28],
- CompressionType: bytes[28:32],
- RSVD: bytes[32:36],
- DataSize: bytes[36:40],
- },
- FlatFileInformationFork: FlatFileInformationFork{
- Platform: bytes[40:44],
- TypeSignature: bytes[44:48],
- CreatorSignature: bytes[48:52],
- Flags: bytes[52:56],
- PlatformFlags: bytes[56:60],
- RSVD: bytes[60:92],
- CreateDate: bytes[92:100],
- ModifyDate: bytes[100:108],
- NameScript: bytes[108:110],
- NameSize: bytes[110:112],
- Name: bytes[112:nameEnd],
- CommentSize: bytes[nameEnd : nameEnd+2],
- Comment: comment,
- },
- FlatFileDataForkHeader: FlatFileDataForkHeader{
- ForkType: bytes[commentEndPos : commentEndPos+4],
- CompressionType: bytes[commentEndPos+4 : commentEndPos+8],
- RSVD: bytes[commentEndPos+8 : commentEndPos+12],
- DataSize: bytes[commentEndPos+12 : commentEndPos+16],
- },
+ return len(p), nil
+}
+
+func (ffif *FlatFileInformationFork) UnmarshalBinary(b []byte) error {
+ nameSize := b[70:72]
+ bs := binary.BigEndian.Uint16(nameSize)
+ nameEnd := 72 + bs
+
+ ffif.Platform = [4]byte(b[0:4])
+ ffif.TypeSignature = [4]byte(b[4:8])
+ ffif.CreatorSignature = [4]byte(b[8:12])
+ ffif.Flags = [4]byte(b[12:16])
+ ffif.PlatformFlags = [4]byte(b[16:20])
+ ffif.RSVD = [32]byte(b[20:52])
+ ffif.CreateDate = [8]byte(b[52:60])
+ ffif.ModifyDate = [8]byte(b[60:68])
+ ffif.NameScript = [2]byte(b[68:70])
+ ffif.NameSize = [2]byte(b[70:72])
+ ffif.Name = b[72:nameEnd]
+
+ if len(b) > int(nameEnd) {
+ ffif.CommentSize = [2]byte(b[nameEnd : nameEnd+2])
+ commentLen := binary.BigEndian.Uint16(ffif.CommentSize[:])
+
+ commentStartPos := int(nameEnd) + 2
+ commentEndPos := int(nameEnd) + 2 + int(commentLen)
+
+ ffif.Comment = b[commentStartPos:commentEndPos]