+
+ rFile, err := os.Stat(filepath.Join(path, resolvedPath))
+ if errors.Is(err, os.ErrNotExist) {
+ continue
+ }
+ if err != nil {
+ return fields, err
+ }
+
+ if rFile.IsDir() {
+ dir, err := os.ReadDir(filepath.Join(path, file.Name()))
+ if err != nil {
+ return fields, err
+ }
+
+ var c uint32
+ for _, f := range dir {
+ if !ignoreFile(f.Name(), ignoreList) {
+ c += 1
+ }
+ }
+
+ binary.BigEndian.PutUint32(fnwi.FileSize[:], c)
+ copy(fnwi.Type[:], []byte("fldr"))
+ copy(fnwi.Creator[:], fileCreator)
+ } else {
+ binary.BigEndian.PutUint32(fnwi.FileSize[:], uint32(rFile.Size()))
+ copy(fnwi.Type[:], []byte(fileTypeFromFilename(rFile.Name()).TypeCode))
+ copy(fnwi.Creator[:], []byte(fileTypeFromFilename(rFile.Name()).CreatorCode))
+ }
+ } else if file.IsDir() {
+ dir, err := os.ReadDir(filepath.Join(path, file.Name()))
+ if err != nil {
+ return fields, err
+ }
+
+ var c uint32
+ for _, f := range dir {
+ if !ignoreFile(f.Name(), ignoreList) {
+ c += 1
+ }
+ }
+
+ binary.BigEndian.PutUint32(fnwi.FileSize[:], c)
+ copy(fnwi.Type[:], []byte("fldr"))
+ copy(fnwi.Creator[:], fileCreator)
+ } else {
+ // the Hotline protocol does not support fileWrapper sizes > 4GiB due to the 4 byte field size, so skip them
+ if fileInfo.Size() > 4294967296 {
+ continue
+ }
+
+ hlFile, err := newFileWrapper(&OSFileStore{}, path+"/"+file.Name(), 0)
+ if err != nil {
+ return nil, err
+ }
+
+ copy(fnwi.FileSize[:], hlFile.totalSize())
+ copy(fnwi.Type[:], hlFile.ffo.FlatFileInformationFork.TypeSignature)
+ copy(fnwi.Creator[:], hlFile.ffo.FlatFileInformationFork.CreatorSignature)