172 lines
4.6 KiB
Go
172 lines
4.6 KiB
Go
// Copyright 2016 the Go-FUSE Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package nodefs
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/hanwen/go-fuse/fuse"
|
|
)
|
|
|
|
// NewDefaultNode returns an implementation of Node that returns
|
|
// ENOSYS for all operations.
|
|
func NewDefaultNode() Node {
|
|
return &defaultNode{}
|
|
}
|
|
|
|
type defaultNode struct {
|
|
inode *Inode
|
|
}
|
|
|
|
func (fs *defaultNode) OnUnmount() {
|
|
}
|
|
|
|
func (fs *defaultNode) OnMount(conn *FileSystemConnector) {
|
|
}
|
|
|
|
func (n *defaultNode) StatFs() *fuse.StatfsOut {
|
|
return nil
|
|
}
|
|
|
|
func (n *defaultNode) SetInode(node *Inode) {
|
|
n.inode = node
|
|
}
|
|
|
|
func (n *defaultNode) Deletable() bool {
|
|
return true
|
|
}
|
|
|
|
func (n *defaultNode) Inode() *Inode {
|
|
return n.inode
|
|
}
|
|
|
|
func (n *defaultNode) OnForget() {
|
|
}
|
|
|
|
func (n *defaultNode) Lookup(out *fuse.Attr, name string, context *fuse.Context) (node *Inode, code fuse.Status) {
|
|
return nil, fuse.ENOENT
|
|
}
|
|
|
|
func (n *defaultNode) Access(mode uint32, context *fuse.Context) (code fuse.Status) {
|
|
return fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Readlink(c *fuse.Context) ([]byte, fuse.Status) {
|
|
return nil, fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Mknod(name string, mode uint32, dev uint32, context *fuse.Context) (newNode *Inode, code fuse.Status) {
|
|
return nil, fuse.ENOSYS
|
|
}
|
|
func (n *defaultNode) Mkdir(name string, mode uint32, context *fuse.Context) (newNode *Inode, code fuse.Status) {
|
|
return nil, fuse.ENOSYS
|
|
}
|
|
func (n *defaultNode) Unlink(name string, context *fuse.Context) (code fuse.Status) {
|
|
return fuse.ENOSYS
|
|
}
|
|
func (n *defaultNode) Rmdir(name string, context *fuse.Context) (code fuse.Status) {
|
|
return fuse.ENOSYS
|
|
}
|
|
func (n *defaultNode) Symlink(name string, content string, context *fuse.Context) (newNode *Inode, code fuse.Status) {
|
|
return nil, fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Rename(oldName string, newParent Node, newName string, context *fuse.Context) (code fuse.Status) {
|
|
return fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Link(name string, existing Node, context *fuse.Context) (newNode *Inode, code fuse.Status) {
|
|
return nil, fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Create(name string, flags uint32, mode uint32, context *fuse.Context) (file File, newNode *Inode, code fuse.Status) {
|
|
return nil, nil, fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Open(flags uint32, context *fuse.Context) (file File, code fuse.Status) {
|
|
return nil, fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Flush(file File, openFlags uint32, context *fuse.Context) (code fuse.Status) {
|
|
return fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) OpenDir(context *fuse.Context) ([]fuse.DirEntry, fuse.Status) {
|
|
ch := n.Inode().Children()
|
|
s := make([]fuse.DirEntry, 0, len(ch))
|
|
for name, child := range ch {
|
|
if child.mountPoint != nil {
|
|
continue
|
|
}
|
|
var a fuse.Attr
|
|
code := child.Node().GetAttr(&a, nil, context)
|
|
if code.Ok() {
|
|
s = append(s, fuse.DirEntry{Name: name, Mode: a.Mode})
|
|
}
|
|
}
|
|
return s, fuse.OK
|
|
}
|
|
|
|
func (n *defaultNode) GetXAttr(attribute string, context *fuse.Context) (data []byte, code fuse.Status) {
|
|
return nil, fuse.ENOATTR
|
|
}
|
|
|
|
func (n *defaultNode) RemoveXAttr(attr string, context *fuse.Context) fuse.Status {
|
|
return fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) SetXAttr(attr string, data []byte, flags int, context *fuse.Context) fuse.Status {
|
|
return fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) ListXAttr(context *fuse.Context) (attrs []string, code fuse.Status) {
|
|
return nil, fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) GetAttr(out *fuse.Attr, file File, context *fuse.Context) (code fuse.Status) {
|
|
if file != nil {
|
|
return file.GetAttr(out)
|
|
}
|
|
if n.Inode().IsDir() {
|
|
out.Mode = fuse.S_IFDIR | 0755
|
|
} else {
|
|
out.Mode = fuse.S_IFREG | 0644
|
|
}
|
|
return fuse.OK
|
|
}
|
|
|
|
func (n *defaultNode) Chmod(file File, perms uint32, context *fuse.Context) (code fuse.Status) {
|
|
return fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Chown(file File, uid uint32, gid uint32, context *fuse.Context) (code fuse.Status) {
|
|
return fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Truncate(file File, size uint64, context *fuse.Context) (code fuse.Status) {
|
|
return fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Utimens(file File, atime *time.Time, mtime *time.Time, context *fuse.Context) (code fuse.Status) {
|
|
return fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Fallocate(file File, off uint64, size uint64, mode uint32, context *fuse.Context) (code fuse.Status) {
|
|
return fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Read(file File, dest []byte, off int64, context *fuse.Context) (fuse.ReadResult, fuse.Status) {
|
|
if file != nil {
|
|
return file.Read(dest, off)
|
|
}
|
|
return nil, fuse.ENOSYS
|
|
}
|
|
|
|
func (n *defaultNode) Write(file File, data []byte, off int64, context *fuse.Context) (written uint32, code fuse.Status) {
|
|
if file != nil {
|
|
return file.Write(data, off)
|
|
}
|
|
return 0, fuse.ENOSYS
|
|
}
|