re PR go/89447 (libgo largefile support is incomplete and inconsistent)

PR go/89447
    syscall, internal/syscall: adjust use of largefile functions
    
    Consistently call __go_openat for openat.  Use fstatat64, creat64,
    sendfile64, and getdents64 where needed.
    
    Based on patch by Rainer Orth.
    
    Fixes https://gcc.gnu.org/PR89447
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/166420

From-SVN: r269521
This commit is contained in:
Ian Lance Taylor 2019-03-09 02:10:22 +00:00
parent 9c0aa28c48
commit ee973155b2
12 changed files with 76 additions and 10 deletions

View File

@ -1,4 +1,4 @@
959260238817af3205fb9907dd92319291e6a893
3106ec19626d75d8275be16c86421132548fa13e
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View File

@ -13,12 +13,9 @@ import (
//extern unlinkat
func unlinkat(int32, *byte, int32) int32
//extern openat
//extern __go_openat
func openat(int32, *byte, int32, syscall.Mode_t) int32
//extern fstatat
func fstatat(int32, *byte, *syscall.Stat_t, int32) int32
func Unlinkat(dirfd int, path string, flags int) error {
var p *byte
p, err := syscall.BytePtrFromString(path)

View File

@ -0,0 +1,14 @@
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build aix hurd linux solaris,386 solaris,sparc
package unix
import (
"syscall"
)
//extern fstatat64
func fstatat(int32, *byte, *syscall.Stat_t, int32) int32

View File

@ -0,0 +1,18 @@
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build !aix
// +build !hurd
// +build !linux
// +build !solaris !386
// +build !solaris !sparc
package unix
import (
"syscall"
)
//extern fstatat
func fstatat(int32, *byte, *syscall.Stat_t, int32) int32

View File

@ -13,8 +13,6 @@ import (
"unsafe"
)
//sys sendfile(outfd int, infd int, offset *Offset_t, count int) (written int, err error)
//sendfile(outfd _C_int, infd _C_int, offset *Offset_t, count Size_t) Ssize_t
func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
if race.Enabled {
race.ReleaseMerge(unsafe.Pointer(&ioSync))

View File

@ -0,0 +1,10 @@
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build solaris,386 solaris,sparc
package syscall
//sys sendfile(outfd int, infd int, offset *Offset_t, count int) (written int, err error)
//sendfile64(outfd _C_int, infd _C_int, offset *Offset_t, count Size_t) Ssize_t

View File

@ -0,0 +1,10 @@
// Copyright 2019 The Go Authors. All rights reserved.
// 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 solaris,amd64 solaris,sparc64
package syscall
//sys sendfile(outfd int, infd int, offset *Offset_t, count int) (written int, err error)
//sendfile(outfd _C_int, infd _C_int, offset *Offset_t, count Size_t) Ssize_t

View File

@ -184,9 +184,6 @@ func FDZero(set *FdSet) {
//sys Close(fd int) (err error)
//close(fd _C_int) _C_int
//sys Creat(path string, mode uint32) (fd int, err error)
//creat(path *byte, mode Mode_t) _C_int
//sysnb Dup(oldfd int) (fd int, err error)
//dup(oldfd _C_int) _C_int

View File

@ -8,6 +8,9 @@
package syscall
//sys Creat(path string, mode uint32) (fd int, err error)
//creat64(path *byte, mode Mode_t) _C_int
//sys Fstat(fd int, stat *Stat_t) (err error)
//fstat64(fd _C_int, stat *Stat_t) _C_int

View File

@ -13,6 +13,9 @@
package syscall
//sys Creat(path string, mode uint32) (fd int, err error)
//creat(path *byte, mode Mode_t) _C_int
//sys Fstat(fd int, stat *Stat_t) (err error)
//fstat(fd _C_int, stat *Stat_t) _C_int

View File

@ -0,0 +1,14 @@
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build solaris,386 solaris,sparc
package syscall
//sys Getdents(fd int, buf []byte) (n int, err error)
//getdents64(fd _C_int, buf *byte, nbyte Size_t) _C_int
func ReadDirent(fd int, buf []byte) (n int, err error) {
return Getdents(fd, buf)
}

View File

@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build solaris,amd64 solaris,sparc64
package syscall
//sys Getdents(fd int, buf []byte) (n int, err error)