]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/file_wrapper.go
Adopt more fixed size array types for struct fields
[rbdr/mobius] / hotline / file_wrapper.go
index 2c796ca05b2254c64728b74f2dca7f2ddcd1f6da..bc6319b4f7db2db50ba1a102b91a4366c5421b33 100644 (file)
@@ -1,6 +1,7 @@
 package hotline
 
 import (
+       "bytes"
        "encoding/binary"
        "errors"
        "fmt"
@@ -113,7 +114,7 @@ func (f *fileWrapper) rsrcForkWriter() (io.WriteCloser, error) {
 }
 
 func (f *fileWrapper) infoForkWriter() (io.WriteCloser, error) {
-       file, err := os.OpenFile(f.infoPath, os.O_CREATE|os.O_WRONLY, 0644)
+       file, err := os.OpenFile(f.infoPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
        if err != nil {
                return nil, err
        }
@@ -206,7 +207,7 @@ func (f *fileWrapper) delete() error {
 
 func (f *fileWrapper) flattenedFileObject() (*flattenedFileObject, error) {
        dataSize := make([]byte, 4)
-       mTime := make([]byte, 8)
+       mTime := [8]byte{}
 
        ft := defaultFileType
 
@@ -243,26 +244,25 @@ func (f *fileWrapper) flattenedFileObject() (*flattenedFileObject, error) {
 
                f.ffo.FlatFileHeader.ForkCount[1] = 3
 
-               if err := f.ffo.FlatFileInformationFork.UnmarshalBinary(b); err != nil {
-                       return nil, err
+               _, err = io.Copy(&f.ffo.FlatFileInformationFork, bytes.NewReader(b))
+               if err != nil {
+                       return nil, fmt.Errorf("error copying FlatFileInformationFork: %w", err)
                }
        } else {
                f.ffo.FlatFileInformationFork = FlatFileInformationFork{
-                       Platform:         []byte("AMAC"), // TODO: Remove hardcode to support "AWIN" Platform (maybe?)
-                       TypeSignature:    []byte(ft.TypeCode),
-                       CreatorSignature: []byte(ft.CreatorCode),
-                       Flags:            []byte{0, 0, 0, 0},
-                       PlatformFlags:    []byte{0, 0, 1, 0}, // TODO: What is this?
-                       RSVD:             make([]byte, 32),
-                       CreateDate:       mTime, // some filesystems don't support createTime
+                       Platform:         [4]byte{0x41, 0x4D, 0x41, 0x43}, // "AMAC" TODO: Remove hardcode to support "AWIN" Platform (maybe?)
+                       TypeSignature:    [4]byte([]byte(ft.TypeCode)),
+                       CreatorSignature: [4]byte([]byte(ft.CreatorCode)),
+                       PlatformFlags:    [4]byte{0, 0, 1, 0}, // TODO: What is this?
+                       CreateDate:       mTime,               // some filesystems don't support createTime
                        ModifyDate:       mTime,
-                       NameScript:       []byte{0, 0},
                        Name:             []byte(f.name),
-                       NameSize:         []byte{0, 0},
-                       CommentSize:      []byte{0, 0},
                        Comment:          []byte{},
                }
-               binary.BigEndian.PutUint16(f.ffo.FlatFileInformationFork.NameSize, uint16(len(f.name)))
+
+               ns := make([]byte, 2)
+               binary.BigEndian.PutUint16(ns, uint16(len(f.name)))
+               f.ffo.FlatFileInformationFork.NameSize = [2]byte(ns[:])
        }
 
        f.ffo.FlatFileInformationForkHeader = FlatFileForkHeader{