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 }