macos: fix O_DIRECT build failure

O_DIRECT has no direct equivalent on MacOS
(check out https://github.com/libuv/libuv/issues/1600 for details).

Just define it to zero there.
libgocryptfs
Jakob Unterwurzacher 4 years ago
parent f6a3e2c7d1
commit 53f7e1a0f0
  1. 2
      internal/fusefrontend/fs.go
  2. 4
      internal/syscallcompat/sys_darwin.go
  3. 4
      internal/syscallcompat/sys_linux.go

@ -105,7 +105,7 @@ func (fs *FS) mangleOpenFlags(flags uint32) (newFlags int) {
// crypto header, alignment will be off, even if userspace makes aligned
// accesses. Running xfstests generic/013 on ext4 used to trigger lots of
// EINVAL errors due to missing alignment. Just fall back to buffered IO.
newFlags = newFlags &^ syscall.O_DIRECT
newFlags = newFlags &^ syscallcompat.O_DIRECT
return newFlags
}

@ -9,6 +9,10 @@ import (
"github.com/hanwen/go-fuse/fuse"
)
// O_DIRECT means oncached I/O on Linux. No direct equivalent on MacOS and defined
// to zero there.
const O_DIRECT = 0
// Sorry, fallocate is not available on OSX at all and
// fcntl F_PREALLOCATE is not accessible from Go.
// See https://github.com/rfjakob/gocryptfs/issues/18 if you want to help.

@ -14,6 +14,10 @@ import (
const _FALLOC_FL_KEEP_SIZE = 0x01
// O_DIRECT means oncached I/O on Linux. No direct equivalent on MacOS and defined
// to zero there.
const O_DIRECT = syscall.O_DIRECT
var preallocWarn sync.Once
// EnospcPrealloc preallocates ciphertext space without changing the file

Loading…
Cancel
Save