X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/65c8e978deda9444e051f3ff8decc2b808dae27f..25f0d77de4489c6759a497617606f2933ca76fc9:/hotline/flattened_file_object.go?ds=sidebyside diff --git a/hotline/flattened_file_object.go b/hotline/flattened_file_object.go index ee8a69b..fae8ab8 100644 --- a/hotline/flattened_file_object.go +++ b/hotline/flattened_file_object.go @@ -55,20 +55,20 @@ type FlatFileInformationFork struct { Comment []byte // File comment } -func NewFlatFileInformationFork(fileName string) FlatFileInformationFork { +func NewFlatFileInformationFork(fileName string, modifyTime []byte) FlatFileInformationFork { return FlatFileInformationFork{ - Platform: []byte("AMAC"), // TODO: Remove hardcode to support "AWIN" Platform (maybe?) - TypeSignature: []byte(fileTypeFromFilename(fileName)), // TODO: Don't infer types from filename - CreatorSignature: []byte(fileCreatorFromFilename(fileName)), // TODO: Don't infer types from filename - Flags: []byte{0, 0, 0, 0}, // TODO: What is this? - PlatformFlags: []byte{0, 0, 1, 0}, // TODO: What is this? - RSVD: make([]byte, 32), // Unimplemented in Hotline Protocol - CreateDate: []byte{0x07, 0x70, 0x00, 0x00, 0xba, 0x74, 0x24, 0x73}, // TODO: implement - ModifyDate: []byte{0x07, 0x70, 0x00, 0x00, 0xba, 0x74, 0x24, 0x73}, // TODO: implement - NameScript: make([]byte, 2), // TODO: What is this? + Platform: []byte("AMAC"), // TODO: Remove hardcode to support "AWIN" Platform (maybe?) + TypeSignature: []byte(fileTypeFromFilename(fileName).TypeCode), // TODO: Don't infer types from filename + CreatorSignature: []byte(fileTypeFromFilename(fileName).CreatorCode), // TODO: Don't infer types from filename + Flags: []byte{0, 0, 0, 0}, // TODO: What is this? + PlatformFlags: []byte{0, 0, 1, 0}, // TODO: What is this? + RSVD: make([]byte, 32), // Unimplemented in Hotline Protocol + CreateDate: modifyTime, // some filesystems don't support createTime + ModifyDate: modifyTime, + NameScript: make([]byte, 2), // TODO: What is this? Name: []byte(fileName), - CommentSize: []byte{0, 4}, - Comment: []byte("TODO"), // TODO: implement (maybe?) + CommentSize: []byte{0, 0}, + Comment: []byte{}, // TODO: implement (maybe?) } } @@ -77,7 +77,7 @@ func NewFlatFileInformationFork(fileName string) FlatFileInformationFork { func (ffif FlatFileInformationFork) DataSize() []byte { size := make([]byte, 4) - //TODO: Can I do math directly on two byte slices? + // TODO: Can I do math directly on two byte slices? dataSize := len(ffif.Name) + len(ffif.Comment) + 74 binary.BigEndian.PutUint32(size, uint32(dataSize)) @@ -124,8 +124,8 @@ func ReadFlattenedFileObject(bytes []byte) flattenedFileObject { comment := bytes[commentStartPos:commentEndPos] - //dataSizeField := bytes[nameEnd+14+commentLen : nameEnd+18+commentLen] - //dataSize := binary.BigEndian.Uint32(dataSizeField) + // dataSizeField := bytes[nameEnd+14+commentLen : nameEnd+18+commentLen] + // dataSize := binary.BigEndian.Uint32(dataSizeField) ffo := flattenedFileObject{ FlatFileHeader: NewFlatFileHeader(), @@ -204,7 +204,7 @@ func NewFlattenedFileObject(fileRoot string, filePath, fileName []byte) (*flatte if err != nil { return nil, err } - defer file.Close() + defer func(file *os.File) { _ = file.Close() }(file) fileInfo, err := file.Stat() if err != nil { @@ -214,9 +214,11 @@ func NewFlattenedFileObject(fileRoot string, filePath, fileName []byte) (*flatte dataSize := make([]byte, 4) binary.BigEndian.PutUint32(dataSize, uint32(fileInfo.Size())) + mTime := toHotlineTime(fileInfo.ModTime()) + return &flattenedFileObject{ FlatFileHeader: NewFlatFileHeader(), - FlatFileInformationFork: NewFlatFileInformationFork(string(fileName)), + FlatFileInformationFork: NewFlatFileInformationFork(string(fileName), mTime), FlatFileDataForkHeader: FlatFileDataForkHeader{ ForkType: []byte("DATA"), CompressionType: []byte{0, 0, 0, 0},