diff --git a/file/file.go b/file/file.go index 2853868..cdaad26 100644 --- a/file/file.go +++ b/file/file.go @@ -13,5 +13,13 @@ type FileInfo struct { // GetInfo extracts some non-standardized items from the result of a Stat call. func GetInfo(fi os.FileInfo) *FileInfo { - return getInfo(fi) + sys := fi.Sys() + switch v := sys.(type) { + case FileInfo: + return &v + case *FileInfo: + return v + default: + return getOSFileInfo(fi) + } } diff --git a/file/file_unix.go b/file/file_unix.go index 6658c20..148c23f 100644 --- a/file/file_unix.go +++ b/file/file_unix.go @@ -9,7 +9,7 @@ import ( "golang.org/x/sys/unix" ) -func getInfo(info os.FileInfo) *FileInfo { +func getOSFileInfo(info os.FileInfo) *FileInfo { fi := &FileInfo{} if s, ok := info.Sys().(*syscall.Stat_t); ok { fi.Nlink = uint32(s.Nlink) diff --git a/file/file_windows.go b/file/file_windows.go index ef173d5..093cf25 100644 --- a/file/file_windows.go +++ b/file/file_windows.go @@ -4,7 +4,7 @@ package file import "os" -func getInfo(info os.FileInfo) *FileInfo { +func getOSFileInfo(info os.FileInfo) *FileInfo { // https://godoc.org/golang.org/x/sys/windows#GetFileInformationByHandle // can be potentially used to populate Nlink