From 9da6530faab0a58c4c4e02b2f3f4a5c754dcbd4e Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Wed, 20 Mar 2019 10:47:17 -0700 Subject: syscall: avoid _getdirentries64 on darwin Getdirentries is implemented with the __getdirentries64 function in libSystem.dylib. That function works, but it's on Apple's can't-be-used-in-an-app-store-application list. Implement Getdirentries using the underlying fdopendir/readdir_r/closedir. The simulation isn't faithful, and could be slow, but it should handle common cases. Don't use Getdirentries in the stdlib, use fdopendir/readdir_r/closedir instead (via (*os.File).readdirnames). Fixes #30933 Update #28984 RELNOTE=yes Change-Id: Ia6b5d003e5bfe43ba54b1e1d9cfa792cc6511717 Reviewed-on: https://go-review.googlesource.com/c/go/+/168479 Reviewed-by: Emmanuel Odeke Reviewed-by: Brad Fitzpatrick Run-TryBot: Emmanuel Odeke TryBot-Result: Gobot Gobot --- src/runtime/sys_darwin.go | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/runtime/sys_darwin.go') diff --git a/src/runtime/sys_darwin.go b/src/runtime/sys_darwin.go index f34ac88352..434fa5f588 100644 --- a/src/runtime/sys_darwin.go +++ b/src/runtime/sys_darwin.go @@ -89,6 +89,17 @@ func syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) } func syscall6X() +//go:linkname syscall_syscallPtr syscall.syscallPtr +//go:nosplit +//go:cgo_unsafe_args +func syscall_syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) { + entersyscallblock() + libcCall(unsafe.Pointer(funcPC(syscallPtr)), unsafe.Pointer(&fn)) + exitsyscall() + return +} +func syscallPtr() + //go:linkname syscall_rawSyscall syscall.rawSyscall //go:nosplit //go:cgo_unsafe_args -- cgit v1.3