From a7bc21a37b777217e30b332761593c7dfbab0216 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Thu, 15 Aug 2019 17:42:13 -0700 Subject: [PATCH] serialfile: fix handling of hidden paths on windows fixes #11 --- is_hidden.go | 19 +++++++++---------- is_hidden_windows.go | 27 ++++++++++----------------- serialfile.go | 2 +- 3 files changed, 20 insertions(+), 28 deletions(-) diff --git a/is_hidden.go b/is_hidden.go index 4ebca60..27960ac 100644 --- a/is_hidden.go +++ b/is_hidden.go @@ -1,18 +1,17 @@ -// +build !windows +//+build !windows package files import ( - "path/filepath" - "strings" + "os" ) -func IsHidden(name string, f Node) bool { - fName := filepath.Base(name) - - if strings.HasPrefix(fName, ".") && len(fName) > 1 { - return true +func isHidden(fi os.FileInfo) bool { + fName := fi.Name() + switch fName { + case "", ".", "..": + return false + default: + return fName[0] == '.' } - - return false } diff --git a/is_hidden_windows.go b/is_hidden_windows.go index 7419f93..6f8bd78 100644 --- a/is_hidden_windows.go +++ b/is_hidden_windows.go @@ -3,33 +3,26 @@ package files import ( - "path/filepath" - "strings" + "os" windows "golang.org/x/sys/windows" ) -func IsHidden(name string, f Node) bool { - - fName := filepath.Base(name) +func isHidden(fi os.FileInfo) bool { + fName := fi.Name() + switch fName { + case "", ".", "..": + return false + } - if strings.HasPrefix(fName, ".") && len(fName) > 1 { + if fName[0] == '.' { return true } - fi, ok := f.(FileInfo) + wi, ok := fi.Sys().(*windows.Win32FileAttributeData) if !ok { return false } - p, e := windows.UTF16PtrFromString(fi.AbsPath()) - if e != nil { - return false - } - - attrs, e := windows.GetFileAttributes(p) - if e != nil { - return false - } - return attrs&windows.FILE_ATTRIBUTE_HIDDEN != 0 + return wi.FileAttributes&windows.FILE_ATTRIBUTE_HIDDEN != 0 } diff --git a/serialfile.go b/serialfile.go index e29752d..75a73b5 100644 --- a/serialfile.go +++ b/serialfile.go @@ -75,7 +75,7 @@ func (it *serialIterator) Next() bool { stat := it.files[0] it.files = it.files[1:] - for !it.handleHiddenFiles && strings.HasPrefix(stat.Name(), ".") { + for !it.handleHiddenFiles && isHidden(stat) { if len(it.files) == 0 { return false }