Add option in readDir to enable symlink following of dirs (#12668)

This commit is contained in:
Anis Elleuch
2021-07-10 00:20:51 +01:00
committed by GitHub
parent da0fd5f056
commit 9be040dd14
5 changed files with 52 additions and 28 deletions

View File

@@ -30,11 +30,6 @@ func access(name string) error {
return err
}
// Return all the entries at the directory dirPath.
func readDir(dirPath string) (entries []string, err error) {
return readDirN(dirPath, -1)
}
// readDirFn applies the fn() function on each entries at dirPath, doesn't recurse into
// the directory itself, if the dirPath doesn't exist this function doesn't return
// an error.
@@ -118,8 +113,8 @@ func readDirFn(dirPath string, filter func(name string, typ os.FileMode) error)
return nil
}
// Return N entries at the directory dirPath. If count is -1, return all entries
func readDirN(dirPath string, count int) (entries []string, err error) {
// Return N entries at the directory dirPath.
func readDirWithOpts(dirPath string, opts readDirOpts) (entries []string, err error) {
f, err := os.Open(dirPath)
if err != nil {
return nil, osErrToFileErr(err)
@@ -138,6 +133,7 @@ func readDirN(dirPath string, count int) (entries []string, err error) {
data := &syscall.Win32finddata{}
handle := syscall.Handle(f.Fd())
count := opts.count
for count != 0 {
e := syscall.FindNextFile(handle, data)
if e != nil {
@@ -172,7 +168,7 @@ func readDirN(dirPath string, count int) (entries []string, err error) {
return nil, err
}
if fi.IsDir() {
if !opts.followDirSymlink && fi.IsDir() {
// directory symlinks are ignored.
continue
}