diff options
Diffstat (limited to 'libgo/go/os/file_unix.go')
-rw-r--r-- | libgo/go/os/file_unix.go | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/libgo/go/os/file_unix.go b/libgo/go/os/file_unix.go index e8e4256..2a7b958 100644 --- a/libgo/go/os/file_unix.go +++ b/libgo/go/os/file_unix.go @@ -171,16 +171,19 @@ func (f *File) readdir(n int) (fi []FileInfo, err error) { if dirname == "" { dirname = "." } - dirname += "/" names, err := f.Readdirnames(n) - fi = make([]FileInfo, len(names)) - for i, filename := range names { - fip, lerr := lstat(dirname + filename) - if lerr != nil { - fi[i] = &fileStat{name: filename} + fi = make([]FileInfo, 0, len(names)) + for _, filename := range names { + fip, lerr := lstat(dirname + "/" + filename) + if IsNotExist(lerr) { + // File disappeared between readdir + stat. + // Just treat it as if it didn't exist. continue } - fi[i] = fip + if lerr != nil { + return fi, lerr + } + fi = append(fi, fip) } return fi, err } |