github.com/hanwen/go-fuse@v1.0.0/fuse/nodefs/defaultnode.go (about)

     1  // Copyright 2016 the Go-FUSE Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package nodefs
     6  
     7  import (
     8  	"time"
     9  
    10  	"github.com/hanwen/go-fuse/fuse"
    11  )
    12  
    13  // NewDefaultNode returns an implementation of Node that returns
    14  // ENOSYS for all operations.
    15  func NewDefaultNode() Node {
    16  	return &defaultNode{}
    17  }
    18  
    19  type defaultNode struct {
    20  	inode *Inode
    21  }
    22  
    23  func (fs *defaultNode) OnUnmount() {
    24  }
    25  
    26  func (fs *defaultNode) OnMount(conn *FileSystemConnector) {
    27  }
    28  
    29  func (n *defaultNode) StatFs() *fuse.StatfsOut {
    30  	return nil
    31  }
    32  
    33  func (n *defaultNode) SetInode(node *Inode) {
    34  	n.inode = node
    35  }
    36  
    37  func (n *defaultNode) Deletable() bool {
    38  	return true
    39  }
    40  
    41  func (n *defaultNode) Inode() *Inode {
    42  	return n.inode
    43  }
    44  
    45  func (n *defaultNode) OnForget() {
    46  }
    47  
    48  func (n *defaultNode) Lookup(out *fuse.Attr, name string, context *fuse.Context) (node *Inode, code fuse.Status) {
    49  	return nil, fuse.ENOENT
    50  }
    51  
    52  func (n *defaultNode) Access(mode uint32, context *fuse.Context) (code fuse.Status) {
    53  	return fuse.ENOSYS
    54  }
    55  
    56  func (n *defaultNode) Readlink(c *fuse.Context) ([]byte, fuse.Status) {
    57  	return nil, fuse.ENOSYS
    58  }
    59  
    60  func (n *defaultNode) Mknod(name string, mode uint32, dev uint32, context *fuse.Context) (newNode *Inode, code fuse.Status) {
    61  	return nil, fuse.ENOSYS
    62  }
    63  func (n *defaultNode) Mkdir(name string, mode uint32, context *fuse.Context) (newNode *Inode, code fuse.Status) {
    64  	return nil, fuse.ENOSYS
    65  }
    66  func (n *defaultNode) Unlink(name string, context *fuse.Context) (code fuse.Status) {
    67  	return fuse.ENOSYS
    68  }
    69  func (n *defaultNode) Rmdir(name string, context *fuse.Context) (code fuse.Status) {
    70  	return fuse.ENOSYS
    71  }
    72  func (n *defaultNode) Symlink(name string, content string, context *fuse.Context) (newNode *Inode, code fuse.Status) {
    73  	return nil, fuse.ENOSYS
    74  }
    75  
    76  func (n *defaultNode) Rename(oldName string, newParent Node, newName string, context *fuse.Context) (code fuse.Status) {
    77  	return fuse.ENOSYS
    78  }
    79  
    80  func (n *defaultNode) Link(name string, existing Node, context *fuse.Context) (newNode *Inode, code fuse.Status) {
    81  	return nil, fuse.ENOSYS
    82  }
    83  
    84  func (n *defaultNode) Create(name string, flags uint32, mode uint32, context *fuse.Context) (file File, newNode *Inode, code fuse.Status) {
    85  	return nil, nil, fuse.ENOSYS
    86  }
    87  
    88  func (n *defaultNode) Open(flags uint32, context *fuse.Context) (file File, code fuse.Status) {
    89  	return nil, fuse.ENOSYS
    90  }
    91  
    92  func (n *defaultNode) Flush(file File, openFlags uint32, context *fuse.Context) (code fuse.Status) {
    93  	return fuse.ENOSYS
    94  }
    95  
    96  func (n *defaultNode) OpenDir(context *fuse.Context) ([]fuse.DirEntry, fuse.Status) {
    97  	ch := n.Inode().Children()
    98  	s := make([]fuse.DirEntry, 0, len(ch))
    99  	for name, child := range ch {
   100  		if child.mountPoint != nil {
   101  			continue
   102  		}
   103  		var a fuse.Attr
   104  		code := child.Node().GetAttr(&a, nil, context)
   105  		if code.Ok() {
   106  			s = append(s, fuse.DirEntry{Name: name, Mode: a.Mode})
   107  		}
   108  	}
   109  	return s, fuse.OK
   110  }
   111  
   112  func (n *defaultNode) GetXAttr(attribute string, context *fuse.Context) (data []byte, code fuse.Status) {
   113  	return nil, fuse.ENOATTR
   114  }
   115  
   116  func (n *defaultNode) RemoveXAttr(attr string, context *fuse.Context) fuse.Status {
   117  	return fuse.ENOSYS
   118  }
   119  
   120  func (n *defaultNode) SetXAttr(attr string, data []byte, flags int, context *fuse.Context) fuse.Status {
   121  	return fuse.ENOSYS
   122  }
   123  
   124  func (n *defaultNode) ListXAttr(context *fuse.Context) (attrs []string, code fuse.Status) {
   125  	return nil, fuse.ENOSYS
   126  }
   127  
   128  func (n *defaultNode) GetAttr(out *fuse.Attr, file File, context *fuse.Context) (code fuse.Status) {
   129  	if file != nil {
   130  		return file.GetAttr(out)
   131  	}
   132  	if n.Inode().IsDir() {
   133  		out.Mode = fuse.S_IFDIR | 0755
   134  	} else {
   135  		out.Mode = fuse.S_IFREG | 0644
   136  	}
   137  	return fuse.OK
   138  }
   139  
   140  func (n *defaultNode) GetLk(file File, owner uint64, lk *fuse.FileLock, flags uint32, out *fuse.FileLock, context *fuse.Context) (code fuse.Status) {
   141  	return fuse.ENOSYS
   142  }
   143  
   144  func (n *defaultNode) SetLk(file File, owner uint64, lk *fuse.FileLock, flags uint32, context *fuse.Context) (code fuse.Status) {
   145  	return fuse.ENOSYS
   146  }
   147  
   148  func (n *defaultNode) SetLkw(file File, owner uint64, lk *fuse.FileLock, flags uint32, context *fuse.Context) (code fuse.Status) {
   149  	return fuse.ENOSYS
   150  }
   151  
   152  func (n *defaultNode) Chmod(file File, perms uint32, context *fuse.Context) (code fuse.Status) {
   153  	return fuse.ENOSYS
   154  }
   155  
   156  func (n *defaultNode) Chown(file File, uid uint32, gid uint32, context *fuse.Context) (code fuse.Status) {
   157  	return fuse.ENOSYS
   158  }
   159  
   160  func (n *defaultNode) Truncate(file File, size uint64, context *fuse.Context) (code fuse.Status) {
   161  	return fuse.ENOSYS
   162  }
   163  
   164  func (n *defaultNode) Utimens(file File, atime *time.Time, mtime *time.Time, context *fuse.Context) (code fuse.Status) {
   165  	return fuse.ENOSYS
   166  }
   167  
   168  func (n *defaultNode) Fallocate(file File, off uint64, size uint64, mode uint32, context *fuse.Context) (code fuse.Status) {
   169  	return fuse.ENOSYS
   170  }
   171  
   172  func (n *defaultNode) Read(file File, dest []byte, off int64, context *fuse.Context) (fuse.ReadResult, fuse.Status) {
   173  	if file != nil {
   174  		return file.Read(dest, off)
   175  	}
   176  	return nil, fuse.ENOSYS
   177  }
   178  
   179  func (n *defaultNode) Write(file File, data []byte, off int64, context *fuse.Context) (written uint32, code fuse.Status) {
   180  	if file != nil {
   181  		return file.Write(data, off)
   182  	}
   183  	return 0, fuse.ENOSYS
   184  }