Skip to content

Commit

Permalink
v2api: fix RootNode cast
Browse files Browse the repository at this point in the history
  • Loading branch information
rfjakob committed Jul 11, 2020
1 parent b0342fa commit d539a4c
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 3 deletions.
4 changes: 2 additions & 2 deletions internal/fusefrontend/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ func (n *Node) Link(ctx context.Context, target fs.InodeEmbedder, name string, o
}
defer syscall.Close(dirfd)

n2 := target.(*Node)
n2 := toNode(target)
dirfd2, cName2, errno := n2.prepareAtSyscall("")
if errno != 0 {
return
Expand Down Expand Up @@ -462,7 +462,7 @@ func (n *Node) Rename(ctx context.Context, name string, newParent fs.InodeEmbedd
}
defer syscall.Close(dirfd)

n2 := newParent.(*Node)
n2 := toNode(newParent)
dirfd2, cName2, errno := n2.prepareAtSyscall("")
if errno != 0 {
return
Expand Down
2 changes: 1 addition & 1 deletion internal/fusefrontend/node_dir_ops.go
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ func (n *Node) Opendir(ctx context.Context) (errno syscall.Errno) {
defer syscall.Close(dirfd)

// Open backing directory
fd, err := syscallcompat.Openat(dirfd, cName, syscall.O_RDONLY|syscall.O_DIRECTORY, 0)
fd, err := syscallcompat.Openat(dirfd, cName, syscall.O_RDONLY|syscall.O_DIRECTORY|syscall.O_NOFOLLOW, 0)
if err != nil {
return fs.ToErrno(err)
}
Expand Down
11 changes: 11 additions & 0 deletions internal/fusefrontend/node_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package fusefrontend
import (
"context"

"github.com/hanwen/go-fuse/v2/fs"

"github.com/hanwen/go-fuse/v2/fuse"
)

Expand All @@ -18,3 +20,12 @@ func toFuseCtx(ctx context.Context) (ctx2 *fuse.Context) {
}
return ctx2
}

// toNode casts a generic fs.InodeEmbedder into *Node. Also handles *RootNode
// by return rn.Node.
func toNode(op fs.InodeEmbedder) *Node {
if r, ok := op.(*RootNode); ok {
return &r.Node
}
return op.(*Node)
}

0 comments on commit d539a4c

Please sign in to comment.