Commit ee973155 by Ian Lance Taylor

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
parent 9c0aa28c
959260238817af3205fb9907dd92319291e6a893 3106ec19626d75d8275be16c86421132548fa13e
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -13,12 +13,9 @@ import ( ...@@ -13,12 +13,9 @@ import (
//extern unlinkat //extern unlinkat
func unlinkat(int32, *byte, int32) int32 func unlinkat(int32, *byte, int32) int32
//extern openat //extern __go_openat
func openat(int32, *byte, int32, syscall.Mode_t) int32 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 { func Unlinkat(dirfd int, path string, flags int) error {
var p *byte var p *byte
p, err := syscall.BytePtrFromString(path) p, err := syscall.BytePtrFromString(path)
......
// 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
// 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
...@@ -13,8 +13,6 @@ import ( ...@@ -13,8 +13,6 @@ import (
"unsafe" "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) { func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
if race.Enabled { if race.Enabled {
race.ReleaseMerge(unsafe.Pointer(&ioSync)) race.ReleaseMerge(unsafe.Pointer(&ioSync))
......
// 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
// 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
...@@ -184,9 +184,6 @@ func FDZero(set *FdSet) { ...@@ -184,9 +184,6 @@ func FDZero(set *FdSet) {
//sys Close(fd int) (err error) //sys Close(fd int) (err error)
//close(fd _C_int) _C_int //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) //sysnb Dup(oldfd int) (fd int, err error)
//dup(oldfd _C_int) _C_int //dup(oldfd _C_int) _C_int
......
...@@ -8,6 +8,9 @@ ...@@ -8,6 +8,9 @@
package syscall 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) //sys Fstat(fd int, stat *Stat_t) (err error)
//fstat64(fd _C_int, stat *Stat_t) _C_int //fstat64(fd _C_int, stat *Stat_t) _C_int
......
...@@ -13,6 +13,9 @@ ...@@ -13,6 +13,9 @@
package syscall 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) //sys Fstat(fd int, stat *Stat_t) (err error)
//fstat(fd _C_int, stat *Stat_t) _C_int //fstat(fd _C_int, stat *Stat_t) _C_int
......
// 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)
}
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// +build solaris,amd64 solaris,sparc64
package syscall package syscall
//sys Getdents(fd int, buf []byte) (n int, err error) //sys Getdents(fd int, buf []byte) (n int, err error)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment