+ fileInfo, err := file.Info()
+ if err != nil {
+ return fields, err
+ }
+
+ if fileInfo.Mode()&os.ModeSymlink != 0 {
+ resolvedPath, err := os.Readlink(filepath.Join(path, file.Name()))
+ if err != nil {
+ return fields, err
+ }
+
+ 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 := ioutil.ReadDir(filepath.Join(path, file.Name()))
+ if err != nil {
+ return fields, err
+ }
+
+ var c uint32
+ for _, f := range dir {
+ if !strings.HasPrefix(f.Name(), ".") {
+ 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)[:])
+ }