From 9cc4ff0bc91dd32df912a56a3e662c69e82e7b60 Mon Sep 17 00:00:00 2001 From: Mei Gui <71293871+xinmeigui-db@users.noreply.github.com> Date: Mon, 18 Jul 2022 04:15:27 -0700 Subject: [PATCH] Pass OpenFlags for OpenFileOp (#127) --- conversions.go | 8 ++++++++ fuseops/ops.go | 4 ++++ samples/memfs/memfs.go | 3 +++ 3 files changed, 15 insertions(+) diff --git a/conversions.go b/conversions.go index c330f8a..ddb57d5 100644 --- a/conversions.go +++ b/conversions.go @@ -294,8 +294,16 @@ func convertInMessage( } case fusekernel.OpOpen: + type input fusekernel.OpenIn + in := (*input)(inMsg.Consume(unsafe.Sizeof(input{}))) + if in == nil { + return nil, errors.New("Corrupt OpOpen") + } + openFlags := fusekernel.OpenFlags(in.Flags) + o = &fuseops.OpenFileOp{ Inode: fuseops.InodeID(inMsg.Header().Nodeid), + OpenFlags: &openFlags, OpContext: fuseops.OpContext{Pid: inMsg.Header().Pid}, } diff --git a/fuseops/ops.go b/fuseops/ops.go index 06537d9..0f51b25 100644 --- a/fuseops/ops.go +++ b/fuseops/ops.go @@ -17,6 +17,8 @@ package fuseops import ( "os" "time" + + "github.com/jacobsa/fuse/internal/fusekernel" ) //////////////////////////////////////////////////////////////////////// @@ -646,6 +648,8 @@ type OpenFileOp struct { // advance, for example, because contents are generated on the fly. UseDirectIO bool + OpenFlags *fusekernel.OpenFlags + OpContext OpContext } diff --git a/samples/memfs/memfs.go b/samples/memfs/memfs.go index a09e79f..3fb0206 100644 --- a/samples/memfs/memfs.go +++ b/samples/memfs/memfs.go @@ -661,6 +661,9 @@ func (fs *memFS) OpenFile( // OpenFileOp should have a valid pid in context. return fuse.EINVAL } + if op.OpenFlags == nil { + return fuse.EINVAL + } fs.mu.Lock() defer fs.mu.Unlock()