]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/file_wrapper.go
Fix corrupt file info forks
[rbdr/mobius] / hotline / file_wrapper.go
index 2c796ca05b2254c64728b74f2dca7f2ddcd1f6da..997325a1adeda1b6ca54a644edbb7a68fe66a8a8 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,9 +244,11 @@ func (f *fileWrapper) flattenedFileObject() (*flattenedFileObject, error) {
 
                f.ffo.FlatFileHeader.ForkCount[1] = 3
 
-               if err := f.ffo.FlatFileInformationFork.UnmarshalBinary(b); err != nil {
+               _, err = io.Copy(&f.ffo.FlatFileInformationFork, bytes.NewReader(b))
+               if err != nil {
                        return nil, err
                }
+
        } else {
                f.ffo.FlatFileInformationFork = FlatFileInformationFork{
                        Platform:         []byte("AMAC"), // TODO: Remove hardcode to support "AWIN" Platform (maybe?)
@@ -254,8 +257,8 @@ func (f *fileWrapper) flattenedFileObject() (*flattenedFileObject, error) {
                        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
-                       ModifyDate:       mTime,
+                       CreateDate:       mTime[:], // some filesystems don't support createTime
+                       ModifyDate:       mTime[:],
                        NameScript:       []byte{0, 0},
                        Name:             []byte(f.name),
                        NameSize:         []byte{0, 0},