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.
39 lines
652 B
39 lines
652 B
//go:build darwin
|
|
|
|
package fuse
|
|
|
|
import (
|
|
"syscall"
|
|
)
|
|
|
|
// Direct I/O support for macOS
|
|
|
|
const (
|
|
// macOS doesn't have O_DIRECT, but we can use fcntl with F_NOCACHE
|
|
F_NOCACHE = 48
|
|
)
|
|
|
|
func openDirectIO(path string, flags int, mode uint32) (int, error) {
|
|
// Open file normally first
|
|
fd, err := syscall.Open(path, flags, mode)
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
// Set F_NOCACHE to bypass buffer cache (similar to O_DIRECT)
|
|
_, _, errno := syscall.Syscall(syscall.SYS_FCNTL,
|
|
uintptr(fd),
|
|
F_NOCACHE,
|
|
1) // enable
|
|
|
|
if errno != 0 {
|
|
syscall.Close(fd)
|
|
return -1, errno
|
|
}
|
|
|
|
return fd, nil
|
|
}
|
|
|
|
func isDirectIOSupported() bool {
|
|
return true
|
|
}
|