PR target/84990
[official-gcc.git] / libgo / go / os / dir_unix.go
blob2dc6a897a859b74a6c94a48b5bc2209af947224e
1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 // +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
7 package os
9 import (
10 "io"
13 func (f *File) readdir(n int) (fi []FileInfo, err error) {
14 dirname := f.name
15 if dirname == "" {
16 dirname = "."
18 names, err := f.Readdirnames(n)
19 fi = make([]FileInfo, 0, len(names))
20 for _, filename := range names {
21 fip, lerr := lstat(dirname + "/" + filename)
22 if IsNotExist(lerr) {
23 // File disappeared between readdir + stat.
24 // Just treat it as if it didn't exist.
25 continue
27 if lerr != nil {
28 return fi, lerr
30 fi = append(fi, fip)
32 if len(fi) == 0 && err == nil && n > 0 {
33 // Per File.Readdir, the slice must be non-empty or err
34 // must be non-nil if n > 0.
35 err = io.EOF
37 return fi, err