mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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:
parent
547f1a6fe7
commit
bdbd5418f4
3 changed files with 48 additions and 4 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue