]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/flattened_file_object.go
Misc cleanup
[rbdr/mobius] / hotline / flattened_file_object.go
index bd281e070b855726952217ac2e05eebd6221b1e2..fae8ab8051f6588288f9b81962d95937cb4dcece 100644 (file)
@@ -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).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:       []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},