X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/c5d9af5aa4d9fb20316be45ab1b775bcf61bcad5..65c8e978deda9444e051f3ff8decc2b808dae27f:/hotline/flattened_file_object.go diff --git a/hotline/flattened_file_object.go b/hotline/flattened_file_object.go index 656cdd3..ee8a69b 100644 --- a/hotline/flattened_file_object.go +++ b/hotline/flattened_file_object.go @@ -2,7 +2,6 @@ package hotline import ( "encoding/binary" - "fmt" "os" ) @@ -68,18 +67,18 @@ func NewFlatFileInformationFork(fileName string) FlatFileInformationFork { ModifyDate: []byte{0x07, 0x70, 0x00, 0x00, 0xba, 0x74, 0x24, 0x73}, // TODO: implement NameScript: make([]byte, 2), // TODO: What is this? Name: []byte(fileName), + CommentSize: []byte{0, 4}, Comment: []byte("TODO"), // TODO: implement (maybe?) } } -// Size of the flat file information fork, which is the fixed size of 72 bytes -// plus the number of bytes in the FileName -// TODO: plus the size of the Comment! +// DataSize calculates the size of the flat file information fork, which is +// 72 bytes for the fixed length fields plus the length of the Name + Comment func (ffif FlatFileInformationFork) DataSize() []byte { size := make([]byte, 4) - nameLen := len(ffif.Name) + //TODO: Can I do math directly on two byte slices? - dataSize := nameLen + 74 + dataSize := len(ffif.Name) + len(ffif.Comment) + 74 binary.BigEndian.PutUint32(size, uint32(dataSize)) @@ -185,9 +184,8 @@ func (f flattenedFileObject) BinaryMarshal() []byte { out = append(out, f.FlatFileInformationFork.NameScript...) out = append(out, f.FlatFileInformationFork.ReadNameSize()...) out = append(out, f.FlatFileInformationFork.Name...) - - // TODO: Implement commentlen and comment field - out = append(out, []byte{0, 0}...) + out = append(out, f.FlatFileInformationFork.CommentSize...) + out = append(out, f.FlatFileInformationFork.Comment...) out = append(out, f.FlatFileDataForkHeader.ForkType...) out = append(out, f.FlatFileDataForkHeader.CompressionType...) @@ -197,8 +195,12 @@ func (f flattenedFileObject) BinaryMarshal() []byte { return out } -func NewFlattenedFileObject(filePath, fileName string) (*flattenedFileObject, error) { - file, err := os.Open(fmt.Sprintf("%v/%v", filePath, fileName)) +func NewFlattenedFileObject(fileRoot string, filePath, fileName []byte) (*flattenedFileObject, error) { + fullFilePath, err := readPath(fileRoot, filePath, fileName) + if err != nil { + return nil, err + } + file, err := os.Open(fullFilePath) if err != nil { return nil, err } @@ -214,7 +216,7 @@ func NewFlattenedFileObject(filePath, fileName string) (*flattenedFileObject, er return &flattenedFileObject{ FlatFileHeader: NewFlatFileHeader(), - FlatFileInformationFork: NewFlatFileInformationFork(fileName), + FlatFileInformationFork: NewFlatFileInformationFork(string(fileName)), FlatFileDataForkHeader: FlatFileDataForkHeader{ ForkType: []byte("DATA"), CompressionType: []byte{0, 0, 0, 0},