aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/path/filepath
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2011-04-01 09:58:05 -0700
committerRob Pike <r@golang.org>2011-04-01 09:58:05 -0700
commita78a25a16b5b56bdaa96ca7ce202bc1f20ab1bf1 (patch)
tree0dd86aa9777dd5d2e4ea9947aada19d3af5cd9e2 /src/pkg/path/filepath
parent731786439cd0c36a8eee721cc44ec26795609e00 (diff)
downloadgo-a78a25a16b5b56bdaa96ca7ce202bc1f20ab1bf1.tar.xz
path/filepath.Glob: don't drop known matches on error.
Fixes #1610. R=rsc CC=golang-dev https://golang.org/cl/4355042
Diffstat (limited to 'src/pkg/path/filepath')
-rw-r--r--src/pkg/path/filepath/match.go21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/pkg/path/filepath/match.go b/src/pkg/path/filepath/match.go
index ad4053fa24..d1ea82b06d 100644
--- a/src/pkg/path/filepath/match.go
+++ b/src/pkg/path/filepath/match.go
@@ -241,37 +241,40 @@ func Glob(pattern string) (matches []string) {
}
// glob searches for files matching pattern in the directory dir
-// and appends them to matches.
-func glob(dir, pattern string, matches []string) []string {
+// and appends them to matches. If the directory cannot be
+// opened, it returns the existing matches. New matches are
+// added in lexicographical order.
+func glob(dir, pattern string, matches []string) (m []string) {
+ m = matches
fi, err := os.Stat(dir)
if err != nil {
- return nil
+ return
}
if !fi.IsDirectory() {
- return matches
+ return
}
d, err := os.Open(dir, os.O_RDONLY, 0666)
if err != nil {
- return nil
+ return
}
defer d.Close()
names, err := d.Readdirnames(-1)
if err != nil {
- return nil
+ return
}
sort.SortStrings(names)
for _, n := range names {
matched, err := Match(pattern, n)
if err != nil {
- return matches
+ break
}
if matched {
- matches = append(matches, Join(dir, n))
+ m = append(m, Join(dir, n))
}
}
- return matches
+ return
}
// hasMeta returns true if path contains any of the magic characters