os: make Readdir work as documented

Readdir's result should never contain a nil.

Fixes #5960.

R=golang-dev, rsc, bradfitz
CC=golang-dev
https://golang.org/cl/12261043
This commit is contained in:
Pieter Droogendijk 2013-08-08 10:44:01 -07:00 committed by Brad Fitzpatrick
parent 547f1a6fe7
commit bdbd5418f4
3 changed files with 48 additions and 4 deletions

View file

@ -149,6 +149,9 @@ func Lstat(name string) (fi FileInfo, err error) {
return fileInfoFromStat(&stat, name), nil
}
// lstat is overridden in tests.
var lstat = Lstat
func (f *File) readdir(n int) (fi []FileInfo, err error) {
dirname := f.name
if dirname == "" {
@ -158,12 +161,14 @@ func (f *File) readdir(n int) (fi []FileInfo, err error) {
names, err := f.Readdirnames(n)
fi = make([]FileInfo, len(names))
for i, filename := range names {
fip, lerr := Lstat(dirname + filename)
if err == nil {
fip, lerr := lstat(dirname + filename)
if lerr == nil {
fi[i] = fip
err = lerr
} else {
fi[i] = &fileStat{name: filename}
if err == nil {
err = lerr
}
}
}
return fi, err