You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
917 B
43 lines
917 B
//go:build darwin
|
|
|
|
package fuse
|
|
|
|
import (
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
// Sendfile support for macOS
|
|
|
|
func sendfileTransfer(outFd int, inFd int, offset *int64, count int) (int, error) {
|
|
// macOS sendfile has different signature: sendfile(in_fd, out_fd, offset, len, hdtr, flags)
|
|
var off int64
|
|
if offset != nil {
|
|
off = *offset
|
|
}
|
|
|
|
length := int64(count)
|
|
|
|
_, _, errno := syscall.Syscall6(syscall.SYS_SENDFILE,
|
|
uintptr(inFd), // input fd
|
|
uintptr(outFd), // output fd
|
|
uintptr(off), // offset
|
|
uintptr(unsafe.Pointer(&length)), // length (in/out parameter)
|
|
0, // hdtr (headers/trailers)
|
|
0) // flags
|
|
|
|
if errno != 0 {
|
|
return 0, errno
|
|
}
|
|
|
|
// Update offset if provided
|
|
if offset != nil {
|
|
*offset += length
|
|
}
|
|
|
|
return int(length), nil
|
|
}
|
|
|
|
func isSendfileSupported() bool {
|
|
return true
|
|
}
|