]> Cypherpunks repositories - gostls13.git/commitdiff
Revert "[release-branch.go1.12] syscall: avoid _getdirentries64 on darwin"
authorKeith Randall <khr@golang.org>
Fri, 5 Apr 2019 17:58:07 +0000 (17:58 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 5 Apr 2019 18:15:47 +0000 (18:15 +0000)
This reverts commit 731ebf4d87dbe349e2eb60233c3965ee62a32690.

Reason for revert: It's not working for large directories.

Change-Id: Ie0f88e0ed1d36c4ea4f32d2acd4e223bd8229ca0
Reviewed-on: https://go-review.googlesource.com/c/go/+/170882
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Andrew Bonventre <andybons@golang.org>

23 files changed:
src/internal/poll/fd_opendir_ios.go [moved from src/internal/poll/fd_opendir_darwin.go with 95% similarity]
src/os/dir_ios.go [moved from src/os/dir_darwin.go with 84% similarity]
src/os/dir_unix.go
src/runtime/sys_darwin.go
src/runtime/sys_darwin_32.go
src/runtime/sys_darwin_386.s
src/runtime/sys_darwin_64.go
src/runtime/sys_darwin_amd64.s
src/runtime/sys_darwin_arm.s
src/runtime/sys_darwin_arm64.s
src/syscall/dirent_bsd_test.go
src/syscall/mksyscall.pl
src/syscall/syscall_darwin.go
src/syscall/syscall_darwin_386.go
src/syscall/syscall_darwin_amd64.go
src/syscall/syscall_darwin_arm.go
src/syscall/syscall_darwin_arm64.go
src/syscall/zsyscall_darwin_386.go
src/syscall/zsyscall_darwin_386.s
src/syscall/zsyscall_darwin_amd64.go
src/syscall/zsyscall_darwin_amd64.s
src/syscall/zsyscall_darwin_arm.go
src/syscall/zsyscall_darwin_arm64.go

similarity index 95%
rename from src/internal/poll/fd_opendir_darwin.go
rename to src/internal/poll/fd_opendir_ios.go
index c7d3318c72e83bd03f77ead716ef2e414c3c11ea..e646bd9a9656af5f1fcdbafa1501adbeb454218a 100644 (file)
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build darwin
+// +build arm arm64
+
 package poll
 
 import (
similarity index 84%
rename from src/os/dir_darwin.go
rename to src/os/dir_ios.go
index 2f9ba78d680517ca315668a7c9110c4bbed2d743..8c14d89508a5f5fa98f12d71840a1d604ef62a65 100644 (file)
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build darwin
+// +build arm arm64
+
 package os
 
 import (
@@ -44,12 +47,12 @@ func (f *File) readdirnames(n int) (names []string, err error) {
 
        names = make([]string, 0, size)
        var dirent syscall.Dirent
-       var entptr *syscall.Dirent
-       for len(names) < size || n == -1 {
-               if res := readdir_r(d.dir, &dirent, &entptr); res != 0 {
+       var entptr uintptr
+       for len(names) < size {
+               if res := readdir_r(d.dir, uintptr(unsafe.Pointer(&dirent)), uintptr(unsafe.Pointer(&entptr))); res != 0 {
                        return names, wrapSyscallError("readdir", syscall.Errno(res))
                }
-               if entptr == nil { // EOF
+               if entptr == 0 { // EOF
                        break
                }
                if dirent.Ino == 0 {
@@ -81,4 +84,4 @@ func (f *File) readdirnames(n int) (names []string, err error) {
 func closedir(dir uintptr) (err error)
 
 //go:linkname readdir_r syscall.readdir_r
-func readdir_r(dir uintptr, entry *syscall.Dirent, result **syscall.Dirent) (res int)
+func readdir_r(dir, entry, result uintptr) (res int)
index b2c8fe6f151c73d9f84a63f8d3820fdd692b91f5..bd99ef48138412d894f77aed29eed7eedb59ed91 100644 (file)
@@ -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 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
 
index 434fa5f5882a1c82915b54ee491988d229d32216..f34ac88352465dad554f4911883361fb3ce4882c 100644 (file)
@@ -89,17 +89,6 @@ 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
index f126be83e52d7219df9b5468072f65ce09bf3aff..2f17091327dae730960b52a0d55dda1d62b56b66 100644 (file)
@@ -19,3 +19,14 @@ func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2, e
        return
 }
 func syscall9()
+
+//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()
index d318509e0a520ec886943c702ff38d8ce73268e8..1bc1a63c285fbfeacd799b6a893d4bd6a2cab929 100644 (file)
@@ -675,42 +675,9 @@ ok:
        POPL    BP
        RET
 
-// syscallPtr is like syscall except the libc function reports an
-// error by returning NULL and setting errno.
+// Not used on 386.
 TEXT runtime·syscallPtr(SB),NOSPLIT,$0
-       PUSHL   BP
-       MOVL    SP, BP
-       SUBL    $24, SP
-       MOVL    32(SP), CX
-       MOVL    (0*4)(CX), AX // fn
-       MOVL    (1*4)(CX), DX // a1
-       MOVL    DX, 0(SP)
-       MOVL    (2*4)(CX), DX // a2
-       MOVL    DX, 4(SP)
-       MOVL    (3*4)(CX), DX // a3
-       MOVL    DX, 8(SP)
-
-       CALL    AX
-
-       MOVL    32(SP), CX
-       MOVL    AX, (4*4)(CX) // r1
-       MOVL    DX, (5*4)(CX) // r2
-
-       // syscallPtr libc functions return NULL on error
-       // and set errno.
-       TESTL   AX, AX
-       JNE     ok
-
-       // Get error code from libc.
-       CALL    libc_error(SB)
-       MOVL    (AX), AX
-       MOVL    32(SP), CX
-       MOVL    AX, (6*4)(CX) // err
-
-ok:
-       XORL    AX, AX        // no error (it's ignored anyway)
-       MOVL    BP, SP
-       POPL    BP
+       MOVL    $0xf1, 0xf1  // crash
        RET
 
 // syscall6 calls a function in libc on behalf of the syscall package.
index 07b0bb54af9d5969f8ce6292a668660e6cafd5e9..8c128811b9f5d8ff9d9cf54c9359aad472997ce7 100644 (file)
@@ -19,3 +19,14 @@ func syscall_syscallX(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
        return
 }
 func syscallX()
+
+//go:linkname syscall_syscallXPtr syscall.syscallXPtr
+//go:nosplit
+//go:cgo_unsafe_args
+func syscall_syscallXPtr(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
+       entersyscallblock()
+       libcCall(unsafe.Pointer(funcPC(syscallXPtr)), unsafe.Pointer(&fn))
+       exitsyscall()
+       return
+}
+func syscallXPtr()
index 934c510b88e738f92f48418037a77ea1430e662b..f99cb00ab8cf09740aecadce96e26e7305f8c316 100644 (file)
@@ -637,40 +637,9 @@ ok:
        POPQ    BP
        RET
 
-// syscallPtr is like syscallX except that the libc function reports an
-// error by returning NULL and setting errno.
-TEXT runtime·syscallPtr(SB),NOSPLIT,$0
-       PUSHQ   BP
-       MOVQ    SP, BP
-       SUBQ    $16, SP
-       MOVQ    (0*8)(DI), CX // fn
-       MOVQ    (2*8)(DI), SI // a2
-       MOVQ    (3*8)(DI), DX // a3
-       MOVQ    DI, (SP)
-       MOVQ    (1*8)(DI), DI // a1
-       XORL    AX, AX        // vararg: say "no float args"
-
-       CALL    CX
-
-       MOVQ    (SP), DI
-       MOVQ    AX, (4*8)(DI) // r1
-       MOVQ    DX, (5*8)(DI) // r2
-
-       // syscallPtr libc functions return NULL on error
-       // and set errno.
-       TESTQ   AX, AX
-       JNE     ok
-
-       // Get error code from libc.
-       CALL    libc_error(SB)
-       MOVLQSX (AX), AX
-       MOVQ    (SP), DI
-       MOVQ    AX, (6*8)(DI) // err
-
-ok:
-       XORL    AX, AX        // no error (it's ignored anyway)
-       MOVQ    BP, SP
-       POPQ    BP
+// Not used on amd64.
+TEXT runtime·syscallXPtr(SB),NOSPLIT,$0
+       MOVL    $0xf1, 0xf1  // crash
        RET
 
 // syscall6 calls a function in libc on behalf of the syscall package.
index 6c3fa0739d7505f9426a87f3d5235b01dfe86a03..54c7afbf34395372230f9b5ac7c3a4f7217d55a3 100644 (file)
@@ -418,7 +418,7 @@ ok:
        RET
 
 // syscallPtr is like syscall except the libc function reports an
-// error by returning NULL and setting errno.
+// error by returning NULL.
 TEXT runtime·syscallPtr(SB),NOSPLIT,$0
        MOVW.W  R0, -4(R13)     // push structure pointer
        MOVW    0(R0), R12      // fn
index 89a2b8a054412356b2f1f580d8d82988f1a964f5..29951d8ad7247fad8064038232ac34346cc31600 100644 (file)
@@ -465,9 +465,9 @@ TEXT runtime·syscallX(SB),NOSPLIT,$0
 ok:
        RET
 
-// syscallPtr is like syscallX except that the libc function reports an
-// error by returning NULL and setting errno.
-TEXT runtime·syscallPtr(SB),NOSPLIT,$0
+// syscallXPtr is like syscallX except that the libc function reports an
+// error by returning NULL.
+TEXT runtime·syscallXPtr(SB),NOSPLIT,$0
        SUB     $16, RSP        // push structure pointer
        MOVD    R0, (RSP)
 
index e5b8357af70a185b3da8004994cf5ccb84062231..e5f5eb3f8aa1dc612cb520645ad9b1ffea1959ed 100644 (file)
@@ -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 darwin dragonfly freebsd netbsd openbsd
+// +build darwin,!arm,!arm64 dragonfly freebsd netbsd openbsd
 
 package syscall_test
 
index 2a3fa67ff04f975181e15387ed5f5a8bb0491fb1..079b08dcb912e5f668fb2e2f1240eb4b0150fa11 100755 (executable)
@@ -350,10 +350,6 @@ while(<>) {
                        $text .= "//go:linkname $funcname $funcname\n";
                        # Tell the linker that funcname can be found in libSystem using varname without the libc_ prefix.
                        my $basename = substr $funcname, 5;
-                       if($basename eq "readdir_r" && ($ENV{'GOARCH'} eq "386" || $ENV{'GOARCH'} eq "amd64")) {
-                           # Hack to make sure we get the 64-bit inode version on darwin/macOS.
-                           $basename .= "\$INODE64"
-                       }
                        $text .= "//go:cgo_import_dynamic $funcname $basename \"/usr/lib/libSystem.B.dylib\"\n";
                }
        }
index 7ceceff2c1e72753248d246167eb36563c8e62d3..80e42b0aec8cb2b3967f28eece8b98c74ec82c7a 100644 (file)
@@ -258,7 +258,6 @@ func Kill(pid int, signum Signal) (err error) { return kill(pid, int(signum), 1)
 //sys  Chown(path string, uid int, gid int) (err error)
 //sys  Chroot(path string) (err error)
 //sys  Close(fd int) (err error)
-//sys  closedir(dir uintptr) (err error)
 //sys  Dup(fd int) (nfd int, err error)
 //sys  Dup2(from int, to int) (err error)
 //sys  Exchangedata(path1 string, path2 string, options int) (err error)
@@ -302,7 +301,6 @@ func Kill(pid int, signum Signal) (err error) { return kill(pid, int(signum), 1)
 //sys  Pread(fd int, p []byte, offset int64) (n int, err error)
 //sys  Pwrite(fd int, p []byte, offset int64) (n int, err error)
 //sys  read(fd int, p []byte) (n int, err error)
-//sys  readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno)
 //sys  Readlink(path string, buf []byte) (n int, err error)
 //sys  Rename(from string, to string) (err error)
 //sys  Revoke(path string) (err error)
@@ -365,70 +363,12 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
        return
 }
 
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-       // Simulate Getdirentries using fdopendir/readdir_r/closedir.
-       const ptrSize = unsafe.Sizeof(uintptr(0))
-       fd2, err := Dup(fd)
-       if err != nil {
-               return 0, err
-       }
-       d, err := fdopendir(fd2)
-       if err != nil {
-               Close(fd2)
-               return 0, err
-       }
-       defer closedir(d)
-       // We keep the number of records already returned in *basep.
-       // It's not the full required semantics, but should handle the case
-       // of calling Getdirentries repeatedly.
-       // It won't handle assigning the results of lseek to *basep, or handle
-       // the directory being edited underfoot.
-       skip := *basep
-       *basep = 0
-       for {
-               var entry Dirent
-               var entryp *Dirent
-               e := readdir_r(d, &entry, &entryp)
-               if e != 0 {
-                       return n, errnoErr(e)
-               }
-               if entryp == nil {
-                       break
-               }
-               if skip > 0 {
-                       skip--
-                       *basep++
-                       continue
-               }
-               reclen := int(entry.Reclen)
-               if reclen > len(buf) {
-                       // Not enough room. Return for now.
-                       // *basep will let us know where we should start up again.
-                       // Note: this strategy for suspending in the middle and
-                       // restarting is O(n^2) in the length of the directory. Oh well.
-                       break
-               }
-               // Copy entry into return buffer.
-               s := struct {
-                       ptr unsafe.Pointer
-                       siz int
-                       cap int
-               }{ptr: unsafe.Pointer(&entry), siz: reclen, cap: reclen}
-               copy(buf, *(*[]byte)(unsafe.Pointer(&s)))
-               buf = buf[reclen:]
-               n += reclen
-               *basep++
-       }
-       return n, nil
-}
-
 // Implemented in the runtime package (runtime/sys_darwin.go)
 func syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 func syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
 func syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
 func rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 func rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
-func syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 
 // Find the entry point for f. See comments in runtime/proc.go for the
 // function of the same name.
index d39c65505c51848b648bf5ae5ce5758174c2ecd0..045ebc726b813c667ea98fdc9f6fc96531d79989 100644 (file)
@@ -16,6 +16,7 @@ func setTimeval(sec, usec int64) Timeval {
 
 //sys  Fstat(fd int, stat *Stat_t) (err error) = SYS_fstat64
 //sys  Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_fstatfs64
+//sys  Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS___getdirentries64
 //sysnb        Gettimeofday(tp *Timeval) (err error)
 //sys  Lstat(path string, stat *Stat_t) (err error) = SYS_lstat64
 //sys  Stat(path string, stat *Stat_t) (err error) = SYS_stat64
@@ -58,20 +59,6 @@ func libc_sendfile_trampoline()
 //go:linkname libc_sendfile libc_sendfile
 //go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"
 
-func fdopendir(fd int) (dir uintptr, err error) {
-       r0, _, e1 := syscallPtr(funcPC(libc_fdopendir_trampoline), uintptr(fd), 0, 0)
-       dir = uintptr(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-func libc_fdopendir_trampoline()
-
-//go:linkname libc_fdopendir libc_fdopendir
-//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib"
-
 // Implemented in the runtime package (runtime/sys_darwin_32.go)
 func syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
 
index 6fc7fb7f1031f53aef3545bf3d8fd77b9a1b1504..7b6493bf9fe585dc459e305da446b36d435dc10f 100644 (file)
@@ -16,6 +16,7 @@ func setTimeval(sec, usec int64) Timeval {
 
 //sys  Fstat(fd int, stat *Stat_t) (err error) = SYS_fstat64
 //sys  Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_fstatfs64
+//sys  Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS___getdirentries64
 //sysnb        Gettimeofday(tp *Timeval) (err error)
 //sys  Lstat(path string, stat *Stat_t) (err error) = SYS_lstat64
 //sys  Stat(path string, stat *Stat_t) (err error) = SYS_stat64
@@ -58,20 +59,6 @@ func libc_sendfile_trampoline()
 //go:linkname libc_sendfile libc_sendfile
 //go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"
 
-func fdopendir(fd int) (dir uintptr, err error) {
-       r0, _, e1 := syscallPtr(funcPC(libc_fdopendir_trampoline), uintptr(fd), 0, 0)
-       dir = uintptr(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-func libc_fdopendir_trampoline()
-
-//go:linkname libc_fdopendir libc_fdopendir
-//go:cgo_import_dynamic libc_fdopendir fdopendir$INODE64 "/usr/lib/libSystem.B.dylib"
-
 // Implemented in the runtime package (runtime/sys_darwin_64.go)
 func syscallX(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 
index c1b417de92020420193bc175651e065388e1239d..cb7489ed7beed423127c5b821547ec08d7388050 100644 (file)
@@ -14,14 +14,20 @@ func setTimeval(sec, usec int64) Timeval {
        return Timeval{Sec: int32(sec), Usec: int32(usec)}
 }
 
+//sys  closedir(dir uintptr) (err error)
 //sys  Fstat(fd int, stat *Stat_t) (err error)
 //sys  Fstatfs(fd int, stat *Statfs_t) (err error)
 //sysnb        Gettimeofday(tp *Timeval) (err error)
 //sys  Lstat(path string, stat *Stat_t) (err error)
+//sys  readdir_r(dir uintptr, entry uintptr, result uintptr) (res int)
 //sys  Stat(path string, stat *Stat_t) (err error)
 //sys  Statfs(path string, stat *Statfs_t) (err error)
 //sys   fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
 
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+       return 0, ENOSYS
+}
+
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
        k.Ident = uint32(fd)
        k.Filter = int16(mode)
@@ -73,6 +79,7 @@ func libc_fdopendir_trampoline()
 //go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib"
 
 // Implemented in the runtime package (runtime/sys_darwin_32.go)
+func syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 func syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
 
 func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // sic
index 3a4c9629acfaddc92c18659bbaa53423194310bd..57902d45c635831e5eb23989ce0b593953aa8aea 100644 (file)
@@ -14,14 +14,20 @@ func setTimeval(sec, usec int64) Timeval {
        return Timeval{Sec: int64(sec), Usec: int32(usec)}
 }
 
+//sys  closedir(dir uintptr) (err error)
 //sys  Fstat(fd int, stat *Stat_t) (err error)
 //sys  Fstatfs(fd int, stat *Statfs_t) (err error)
 //sysnb        Gettimeofday(tp *Timeval) (err error)
 //sys  Lstat(path string, stat *Stat_t) (err error)
+//sys  readdir_r(dirp uintptr, entry uintptr, result uintptr) (res int)
 //sys  Stat(path string, stat *Stat_t) (err error)
 //sys  Statfs(path string, stat *Statfs_t) (err error)
 //sys   fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
 
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+       return 0, ENOSYS
+}
+
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
        k.Ident = uint64(fd)
        k.Filter = int16(mode)
@@ -59,7 +65,7 @@ func libc_sendfile_trampoline()
 //go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"
 
 func fdopendir(fd int) (dir uintptr, err error) {
-       r0, _, e1 := syscallPtr(funcPC(libc_fdopendir_trampoline), uintptr(fd), 0, 0)
+       r0, _, e1 := syscallXPtr(funcPC(libc_fdopendir_trampoline), uintptr(fd), 0, 0)
        dir = uintptr(r0)
        if e1 != 0 {
                err = errnoErr(e1)
@@ -74,5 +80,6 @@ func libc_fdopendir_trampoline()
 
 // Implemented in the runtime package (runtime/sys_darwin_64.go)
 func syscallX(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
+func syscallXPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 
 func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // sic
index f62a3b2ef263be90cf239ce48066ec16efdd7b9e..758ff7b129dd26bf5c881c9978b3797466322bea 100644 (file)
@@ -513,20 +513,6 @@ func libc_close_trampoline()
 //go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func closedir(dir uintptr) (err error) {
-       _, _, e1 := syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-func libc_closedir_trampoline()
-
-//go:linkname libc_closedir libc_closedir
-//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Dup(fd int) (nfd int, err error) {
        r0, _, e1 := syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
        nfd = int(r0)
@@ -1194,18 +1180,6 @@ func libc_read_trampoline()
 //go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
-       r0, _, _ := syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
-       res = Errno(r0)
-       return
-}
-
-func libc_readdir_r_trampoline()
-
-//go:linkname libc_readdir_r libc_readdir_r
-//go:cgo_import_dynamic libc_readdir_r readdir_r$INODE64 "/usr/lib/libSystem.B.dylib"
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Readlink(path string, buf []byte) (n int, err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
@@ -1873,6 +1847,27 @@ func libc_fstatfs64_trampoline()
 //go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+       var _p0 unsafe.Pointer
+       if len(buf) > 0 {
+               _p0 = unsafe.Pointer(&buf[0])
+       } else {
+               _p0 = unsafe.Pointer(&_zero)
+       }
+       r0, _, e1 := syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
+       n = int(r0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+func libc___getdirentries64_trampoline()
+
+//go:linkname libc___getdirentries64 libc___getdirentries64
+//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 "/usr/lib/libSystem.B.dylib"
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func Gettimeofday(tp *Timeval) (err error) {
        _, _, e1 := rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
        if e1 != 0 {
index 009ddb25609bce9336aafdf7d2dbd8d3906cf161..a688192501b329c08baea791f733bb9e53ad3acb 100644 (file)
@@ -9,8 +9,6 @@ TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_setattrlist(SB)
 TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_sendfile(SB)
-TEXT ·libc_fdopendir_trampoline(SB),NOSPLIT,$0-0
-       JMP     libc_fdopendir(SB)
 TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_getgroups(SB)
 TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0
@@ -75,8 +73,6 @@ TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_chroot(SB)
 TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_close(SB)
-TEXT ·libc_closedir_trampoline(SB),NOSPLIT,$0-0
-       JMP     libc_closedir(SB)
 TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_dup(SB)
 TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0
@@ -161,8 +157,6 @@ TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_pwrite(SB)
 TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_read(SB)
-TEXT ·libc_readdir_r_trampoline(SB),NOSPLIT,$0-0
-       JMP     libc_readdir_r(SB)
 TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_readlink(SB)
 TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0
@@ -241,6 +235,8 @@ TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_fstat64(SB)
 TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_fstatfs64(SB)
+TEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0
+       JMP     libc___getdirentries64(SB)
 TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_gettimeofday(SB)
 TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
index 7d4888c03f76cd03a96c10f131c6452c2bb59d0a..afc3d72d8d7cd102951e3c242463780e04227fa3 100644 (file)
@@ -513,20 +513,6 @@ func libc_close_trampoline()
 //go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func closedir(dir uintptr) (err error) {
-       _, _, e1 := syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-func libc_closedir_trampoline()
-
-//go:linkname libc_closedir libc_closedir
-//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Dup(fd int) (nfd int, err error) {
        r0, _, e1 := syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
        nfd = int(r0)
@@ -1194,18 +1180,6 @@ func libc_read_trampoline()
 //go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
-       r0, _, _ := syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
-       res = Errno(r0)
-       return
-}
-
-func libc_readdir_r_trampoline()
-
-//go:linkname libc_readdir_r libc_readdir_r
-//go:cgo_import_dynamic libc_readdir_r readdir_r$INODE64 "/usr/lib/libSystem.B.dylib"
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Readlink(path string, buf []byte) (n int, err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
@@ -1873,6 +1847,27 @@ func libc_fstatfs64_trampoline()
 //go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+       var _p0 unsafe.Pointer
+       if len(buf) > 0 {
+               _p0 = unsafe.Pointer(&buf[0])
+       } else {
+               _p0 = unsafe.Pointer(&_zero)
+       }
+       r0, _, e1 := syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
+       n = int(r0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+func libc___getdirentries64_trampoline()
+
+//go:linkname libc___getdirentries64 libc___getdirentries64
+//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 "/usr/lib/libSystem.B.dylib"
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func Gettimeofday(tp *Timeval) (err error) {
        _, _, e1 := rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
        if e1 != 0 {
index a308eb1c0f604549c505a4d075b6a1bd26df00d6..21ab38e3eedded368e81363deb7a3b506ec89d64 100644 (file)
@@ -9,8 +9,6 @@ TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_setattrlist(SB)
 TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_sendfile(SB)
-TEXT ·libc_fdopendir_trampoline(SB),NOSPLIT,$0-0
-       JMP     libc_fdopendir(SB)
 TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_getgroups(SB)
 TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0
@@ -75,8 +73,6 @@ TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_chroot(SB)
 TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_close(SB)
-TEXT ·libc_closedir_trampoline(SB),NOSPLIT,$0-0
-       JMP     libc_closedir(SB)
 TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_dup(SB)
 TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0
@@ -161,8 +157,6 @@ TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_pwrite(SB)
 TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_read(SB)
-TEXT ·libc_readdir_r_trampoline(SB),NOSPLIT,$0-0
-       JMP     libc_readdir_r(SB)
 TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_readlink(SB)
 TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0
@@ -241,6 +235,8 @@ TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_fstat64(SB)
 TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_fstatfs64(SB)
+TEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0
+       JMP     libc___getdirentries64(SB)
 TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
        JMP     libc_gettimeofday(SB)
 TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
index c282effa51ed5b26c3b3523f2b1f6715c5cb2b1c..80ef9e514fbb18a792b5bdcca9b940fbcbdf7c80 100644 (file)
@@ -513,20 +513,6 @@ func libc_close_trampoline()
 //go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func closedir(dir uintptr) (err error) {
-       _, _, e1 := syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-func libc_closedir_trampoline()
-
-//go:linkname libc_closedir libc_closedir
-//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Dup(fd int) (nfd int, err error) {
        r0, _, e1 := syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
        nfd = int(r0)
@@ -1194,18 +1180,6 @@ func libc_read_trampoline()
 //go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
-       r0, _, _ := syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
-       res = Errno(r0)
-       return
-}
-
-func libc_readdir_r_trampoline()
-
-//go:linkname libc_readdir_r libc_readdir_r
-//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Readlink(path string, buf []byte) (n int, err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
@@ -1845,6 +1819,20 @@ func libc_openat_trampoline()
 //go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func closedir(dir uintptr) (err error) {
+       _, _, e1 := syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+func libc_closedir_trampoline()
+
+//go:linkname libc_closedir libc_closedir
+//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func Fstat(fd int, stat *Stat_t) (err error) {
        _, _, e1 := syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
        if e1 != 0 {
@@ -1906,6 +1894,18 @@ func libc_lstat_trampoline()
 //go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func readdir_r(dir uintptr, entry uintptr, result uintptr) (res int) {
+       r0, _, _ := syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(entry), uintptr(result))
+       res = int(r0)
+       return
+}
+
+func libc_readdir_r_trampoline()
+
+//go:linkname libc_readdir_r libc_readdir_r
+//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func Stat(path string, stat *Stat_t) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index a55724f7136a10d7db42084bf69a4b9d57968537..a917176a31e1859723a8bc1c123ebf98f16c8484 100644 (file)
@@ -513,20 +513,6 @@ func libc_close_trampoline()
 //go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func closedir(dir uintptr) (err error) {
-       _, _, e1 := syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-func libc_closedir_trampoline()
-
-//go:linkname libc_closedir libc_closedir
-//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Dup(fd int) (nfd int, err error) {
        r0, _, e1 := syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
        nfd = int(r0)
@@ -1194,18 +1180,6 @@ func libc_read_trampoline()
 //go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
-       r0, _, _ := syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
-       res = Errno(r0)
-       return
-}
-
-func libc_readdir_r_trampoline()
-
-//go:linkname libc_readdir_r libc_readdir_r
-//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Readlink(path string, buf []byte) (n int, err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
@@ -1845,6 +1819,20 @@ func libc_openat_trampoline()
 //go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func closedir(dir uintptr) (err error) {
+       _, _, e1 := syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+func libc_closedir_trampoline()
+
+//go:linkname libc_closedir libc_closedir
+//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func Fstat(fd int, stat *Stat_t) (err error) {
        _, _, e1 := syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
        if e1 != 0 {
@@ -1906,6 +1894,18 @@ func libc_lstat_trampoline()
 //go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib"
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func readdir_r(dirp uintptr, entry uintptr, result uintptr) (res int) {
+       r0, _, _ := syscall(funcPC(libc_readdir_r_trampoline), uintptr(dirp), uintptr(entry), uintptr(result))
+       res = int(r0)
+       return
+}
+
+func libc_readdir_r_trampoline()
+
+//go:linkname libc_readdir_r libc_readdir_r
+//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func Stat(path string, stat *Stat_t) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)