mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime,os,syscall,internal/poll: replace getdirentries on iOS
The getdirentries syscall is considered private API on iOS and is rejected by the App Store submission checks. Replace it with the fdopendir/readdir_r/closedir syscalls. Fixes #28984 Change-Id: I73341b124310e9cb34834a95f946769f337ec5b7 Reviewed-on: https://go-review.googlesource.com/c/153338 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
571d93e977
commit
9eb383e8f0
24 changed files with 400 additions and 128 deletions
|
|
@ -2,7 +2,7 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build aix darwin dragonfly freebsd js,wasm linux nacl netbsd openbsd solaris
|
||||
// +build aix darwin,!arm,!arm64 dragonfly freebsd js,wasm linux nacl netbsd openbsd solaris
|
||||
|
||||
package os
|
||||
|
||||
|
|
@ -12,37 +12,19 @@ import (
|
|||
"syscall"
|
||||
)
|
||||
|
||||
// Auxiliary information if the File describes a directory
|
||||
type dirInfo struct {
|
||||
buf []byte // buffer for directory I/O
|
||||
nbuf int // length of buf; return value from Getdirentries
|
||||
bufp int // location of next record in buf.
|
||||
}
|
||||
|
||||
const (
|
||||
// More than 5760 to work around https://golang.org/issue/24015.
|
||||
blockSize = 8192
|
||||
)
|
||||
|
||||
func (f *File) readdir(n int) (fi []FileInfo, err error) {
|
||||
dirname := f.name
|
||||
if dirname == "" {
|
||||
dirname = "."
|
||||
}
|
||||
names, err := f.Readdirnames(n)
|
||||
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
|
||||
}
|
||||
if lerr != nil {
|
||||
return fi, lerr
|
||||
}
|
||||
fi = append(fi, fip)
|
||||
}
|
||||
if len(fi) == 0 && err == nil && n > 0 {
|
||||
// Per File.Readdir, the slice must be non-empty or err
|
||||
// must be non-nil if n > 0.
|
||||
err = io.EOF
|
||||
}
|
||||
return fi, err
|
||||
}
|
||||
func (d *dirInfo) close() {}
|
||||
|
||||
func (f *File) readdirnames(n int) (names []string, err error) {
|
||||
// If this file has no dirinfo, create one.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue