зеркало из https://github.com/golang/sys.git
unix: add sendfile support on Solaris
Same was done in CL 7940 for the syscall package. Fixes golang/go#10838 Change-Id: I98efa99f57f21bdcdbfb117af66f673e37767fec Reviewed-on: https://go-review.googlesource.com/103335 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Родитель
13d03a9a82
Коммит
2de2067aa5
|
@ -676,6 +676,7 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
|
|||
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_connect
|
||||
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
|
||||
//sys munmap(addr uintptr, length uintptr) (err error)
|
||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = libsendfile.sendfile
|
||||
//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_sendto
|
||||
//sys socket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket
|
||||
//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_socketpair
|
||||
|
|
|
@ -21,8 +21,3 @@ func (iov *Iovec) SetLen(length int) {
|
|||
func (cmsg *Cmsghdr) SetLen(length int) {
|
||||
cmsg.Len = uint32(length)
|
||||
}
|
||||
|
||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
||||
// TODO(aram): implement this, see issue 5847.
|
||||
panic("unimplemented")
|
||||
}
|
||||
|
|
|
@ -128,6 +128,7 @@ import (
|
|||
//go:cgo_import_dynamic libc___xnet_connect __xnet_connect "libsocket.so"
|
||||
//go:cgo_import_dynamic libc_mmap mmap "libc.so"
|
||||
//go:cgo_import_dynamic libc_munmap munmap "libc.so"
|
||||
//go:cgo_import_dynamic libc_sendfile sendfile "libsendfile.so"
|
||||
//go:cgo_import_dynamic libc___xnet_sendto __xnet_sendto "libsocket.so"
|
||||
//go:cgo_import_dynamic libc___xnet_socket __xnet_socket "libsocket.so"
|
||||
//go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair "libsocket.so"
|
||||
|
@ -255,6 +256,7 @@ import (
|
|||
//go:linkname proc__xnet_connect libc___xnet_connect
|
||||
//go:linkname procmmap libc_mmap
|
||||
//go:linkname procmunmap libc_munmap
|
||||
//go:linkname procsendfile libc_sendfile
|
||||
//go:linkname proc__xnet_sendto libc___xnet_sendto
|
||||
//go:linkname proc__xnet_socket libc___xnet_socket
|
||||
//go:linkname proc__xnet_socketpair libc___xnet_socketpair
|
||||
|
@ -383,6 +385,7 @@ var (
|
|||
proc__xnet_connect,
|
||||
procmmap,
|
||||
procmunmap,
|
||||
procsendfile,
|
||||
proc__xnet_sendto,
|
||||
proc__xnet_socket,
|
||||
proc__xnet_socketpair,
|
||||
|
@ -1589,6 +1592,15 @@ func munmap(addr uintptr, length uintptr) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
||||
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendfile)), 4, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
|
||||
written = int(r0)
|
||||
if e1 != 0 {
|
||||
err = e1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
|
||||
var _p0 *byte
|
||||
if len(buf) > 0 {
|
||||
|
|
Загрузка…
Ссылка в новой задаче