X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/a8e89ca4e65f5db3ee6061ede68aade814b4d75c..71f9ce10c4d0ebc0d5aec5a2bf46b1c508409338:/hotline/file_wrapper.go diff --git a/hotline/file_wrapper.go b/hotline/file_wrapper.go index 2c796ca..bc6319b 100644 --- a/hotline/file_wrapper.go +++ b/hotline/file_wrapper.go @@ -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{