From c1a851403d6b241bdec48685fa835c9f2cf3681b Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Wed, 25 Mar 2015 09:59:24 +1100 Subject: [PATCH] Added a RespondToOp helper. --- fuseutil/file_system.go | 23 +++++++++++++++++++++++ samples/hellofs/hello_fs.go | 14 +++++++------- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/fuseutil/file_system.go b/fuseutil/file_system.go index 6b65b50..fb359cb 100644 --- a/fuseutil/file_system.go +++ b/fuseutil/file_system.go @@ -64,6 +64,29 @@ func NewFileSystemServer(fs FileSystem) fuse.Server { return fileSystemServer{fs} } +// A convenience function that makes it easy to ensure you respond to an +// operation when a FileSystem method returns. Responds to op with the current +// value of *err. +// +// For example: +// +// func (fs *myFS) ReadFile(op *fuseops.ReadFileOp) { +// var err error +// defer fuseutil.RespondToOp(op, &err) +// +// if err = fs.frobnicate(); err != nil { +// err = fmt.Errorf("frobnicate: %v", err) +// return +// } +// +// // Lots more manipulation of err, and return paths. +// // [...] +// } +// +func RespondToOp(op fuseops.Op, err *error) { + op.Respond(*err) +} + type fileSystemServer struct { fs FileSystem } diff --git a/samples/hellofs/hello_fs.go b/samples/hellofs/hello_fs.go index 2957ce0..d33769c 100644 --- a/samples/hellofs/hello_fs.go +++ b/samples/hellofs/hello_fs.go @@ -149,14 +149,14 @@ func (fs *helloFS) patchAttributes( func (fs *helloFS) Init(op *fuseops.InitOp) { var err error - defer func() { op.Respond(err) }() + defer fuseutil.RespondToOp(op, &err) return } func (fs *helloFS) LookUpInode(op *fuseops.LookUpInodeOp) { var err error - defer func() { op.Respond(err) }() + defer fuseutil.RespondToOp(op, &err) // Find the info for the parent. parentInfo, ok := gInodeInfo[op.Parent] @@ -184,7 +184,7 @@ func (fs *helloFS) LookUpInode(op *fuseops.LookUpInodeOp) { func (fs *helloFS) GetInodeAttributes( op *fuseops.GetInodeAttributesOp) { var err error - defer func() { op.Respond(err) }() + defer fuseutil.RespondToOp(op, &err) // Find the info for this inode. info, ok := gInodeInfo[op.Inode] @@ -205,7 +205,7 @@ func (fs *helloFS) GetInodeAttributes( func (fs *helloFS) OpenDir( op *fuseops.OpenDirOp) { var err error - defer func() { op.Respond(err) }() + defer fuseutil.RespondToOp(op, &err) // Allow opening any directory. return @@ -214,7 +214,7 @@ func (fs *helloFS) OpenDir( func (fs *helloFS) ReadDir( op *fuseops.ReadDirOp) { var err error - defer func() { op.Respond(err) }() + defer fuseutil.RespondToOp(op, &err) // Find the info for this inode. info, ok := gInodeInfo[op.Inode] @@ -253,7 +253,7 @@ func (fs *helloFS) ReadDir( func (fs *helloFS) OpenFile( op *fuseops.OpenFileOp) { var err error - defer func() { op.Respond(err) }() + defer fuseutil.RespondToOp(op, &err) // Allow opening any file. return @@ -262,7 +262,7 @@ func (fs *helloFS) OpenFile( func (fs *helloFS) ReadFile( op *fuseops.ReadFileOp) { var err error - defer func() { op.Respond(err) }() + defer fuseutil.RespondToOp(op, &err) // Let io.ReaderAt deal with the semantics. reader := strings.NewReader("Hello, world!")