Added a RespondToOp helper.

geesefs-0-30-9
Aaron Jacobs 2015-03-25 09:59:24 +11:00
parent e96100b5ac
commit c1a851403d
2 changed files with 30 additions and 7 deletions

View File

@ -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
}

View File

@ -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!")