| // Copyright 2016 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // +build appengine !linux,!darwin,!freebsd,!openbsd,!netbsd |
| |
| package fastwalk |
| |
| import ( |
| "io/ioutil" |
| "os" |
| ) |
| |
| // readDir calls fn for each directory entry in dirName. |
| // It does not descend into directories or follow symlinks. |
| // If fn returns a non-nil error, readDir returns with that error |
| // immediately. |
| func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) error) error { |
| fis, err := ioutil.ReadDir(dirName) |
| if err != nil { |
| return err |
| } |
| skipFiles := false |
| for _, fi := range fis { |
| if fi.Mode().IsRegular() && skipFiles { |
| continue |
| } |
| if err := fn(dirName, fi.Name(), fi.Mode()&os.ModeType); err != nil { |
| if err == ErrSkipFiles { |
| skipFiles = true |
| continue |
| } |
| return err |
| } |
| } |
| return nil |
| } |