Write([]byte, filenodePtr) (int, filenodePtr, error)
Truncate(int64) error
IsDir() bool
- Readdir() []os.FileInfo
+ Readdir() ([]os.FileInfo, error)
Size() int64
FileInfo() os.FileInfo
return false
}
-func (*nullnode) Readdir() []os.FileInfo {
- return nil
+func (*nullnode) Readdir() ([]os.FileInfo, error) {
+ return nil, ErrInvalidOperation
}
func (*nullnode) Child(name string, replace func(inode) inode) inode {
return n.fileinfo
}
-func (n *treenode) Readdir() (fi []os.FileInfo) {
+func (n *treenode) Readdir() (fi []os.FileInfo, err error) {
n.RLock()
defer n.RUnlock()
fi = make([]os.FileInfo, 0, len(n.inodes))
return dn.realinode().Child(name, replace)
}
-func (dn *deferrednode) Truncate(size int64) error { return dn.realinode().Truncate(size) }
-func (dn *deferrednode) SetParent(p inode, name string) { dn.realinode().SetParent(p, name) }
-func (dn *deferrednode) IsDir() bool { return dn.currentinode().IsDir() }
-func (dn *deferrednode) Readdir() []os.FileInfo { return dn.realinode().Readdir() }
-func (dn *deferrednode) Size() int64 { return dn.currentinode().Size() }
-func (dn *deferrednode) FileInfo() os.FileInfo { return dn.currentinode().FileInfo() }
-func (dn *deferrednode) Lock() { dn.realinode().Lock() }
-func (dn *deferrednode) Unlock() { dn.realinode().Unlock() }
-func (dn *deferrednode) RLock() { dn.realinode().RLock() }
-func (dn *deferrednode) RUnlock() { dn.realinode().RUnlock() }
-func (dn *deferrednode) FS() FileSystem { return dn.currentinode().FS() }
-func (dn *deferrednode) Parent() inode { return dn.currentinode().Parent() }
+func (dn *deferrednode) Truncate(size int64) error { return dn.realinode().Truncate(size) }
+func (dn *deferrednode) SetParent(p inode, name string) { dn.realinode().SetParent(p, name) }
+func (dn *deferrednode) IsDir() bool { return dn.currentinode().IsDir() }
+func (dn *deferrednode) Readdir() ([]os.FileInfo, error) { return dn.realinode().Readdir() }
+func (dn *deferrednode) Size() int64 { return dn.currentinode().Size() }
+func (dn *deferrednode) FileInfo() os.FileInfo { return dn.currentinode().FileInfo() }
+func (dn *deferrednode) Lock() { dn.realinode().Lock() }
+func (dn *deferrednode) Unlock() { dn.realinode().Unlock() }
+func (dn *deferrednode) RLock() { dn.realinode().RLock() }
+func (dn *deferrednode) RUnlock() { dn.realinode().RUnlock() }
+func (dn *deferrednode) FS() FileSystem { return dn.currentinode().FS() }
+func (dn *deferrednode) Parent() inode { return dn.currentinode().Parent() }
return nil, ErrInvalidOperation
}
if count <= 0 {
- return f.inode.Readdir(), nil
+ return f.inode.Readdir()
}
if f.unreaddirs == nil {
- f.unreaddirs = f.inode.Readdir()
+ var err error
+ f.unreaddirs, err = f.inode.Readdir()
+ if err != nil {
+ return nil, err
+ }
}
if len(f.unreaddirs) == 0 {
return nil, io.EOF