1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: Apache-2.0
12 type nullnode struct{}
14 func (*nullnode) Mkdir(string, os.FileMode) error {
15 return ErrInvalidOperation
18 func (*nullnode) Read([]byte, filenodePtr) (int, filenodePtr, error) {
19 return 0, filenodePtr{}, ErrInvalidOperation
22 func (*nullnode) Write([]byte, filenodePtr) (int, filenodePtr, error) {
23 return 0, filenodePtr{}, ErrInvalidOperation
26 func (*nullnode) Truncate(int64) error {
27 return ErrInvalidOperation
30 func (*nullnode) FileInfo() os.FileInfo {
34 func (*nullnode) IsDir() bool {
38 func (*nullnode) Readdir() []os.FileInfo {
42 func (*nullnode) Child(name string, replace func(inode) inode) inode {
46 type treenode struct {
48 inodes map[string]inode
54 func (n *treenode) Parent() inode {
60 func (n *treenode) IsDir() bool {
64 func (n *treenode) Child(name string, replace func(inode) inode) (child inode) {
65 // TODO: special treatment for "", ".", ".."
66 child = n.inodes[name]
68 child = replace(child)
70 delete(n.inodes, name)
72 n.inodes[name] = child
78 func (n *treenode) Size() int64 {
79 return n.FileInfo().Size()
82 func (n *treenode) FileInfo() os.FileInfo {
85 n.fileinfo.size = int64(len(n.inodes))
89 func (n *treenode) Readdir() (fi []os.FileInfo) {
92 fi = make([]os.FileInfo, 0, len(n.inodes))
93 for _, inode := range n.inodes {
94 fi = append(fi, inode.FileInfo())