fs is dir entry
This commit is contained in:
parent
e576e62599
commit
fd3beea874
12 changed files with 172 additions and 27 deletions
src/host/vfs
|
@ -9,20 +9,20 @@ import (
|
|||
"sync"
|
||||
)
|
||||
|
||||
type ResolveFS struct {
|
||||
type ResolverFS struct {
|
||||
rootFS Filesystem
|
||||
resolver *resolver
|
||||
}
|
||||
|
||||
func NewResolveFS(rootFs Filesystem, factories map[string]FsFactory) *ResolveFS {
|
||||
return &ResolveFS{
|
||||
func NewResolveFS(rootFs Filesystem, factories map[string]FsFactory) *ResolverFS {
|
||||
return &ResolverFS{
|
||||
rootFS: rootFs,
|
||||
resolver: newResolver(factories),
|
||||
}
|
||||
}
|
||||
|
||||
// Open implements Filesystem.
|
||||
func (r *ResolveFS) Open(filename string) (File, error) {
|
||||
func (r *ResolverFS) Open(filename string) (File, error) {
|
||||
fsPath, nestedFs, nestedFsPath, err := r.resolver.resolvePath(filename, r.rootFS.Open)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -35,7 +35,7 @@ func (r *ResolveFS) Open(filename string) (File, error) {
|
|||
}
|
||||
|
||||
// ReadDir implements Filesystem.
|
||||
func (r *ResolveFS) ReadDir(dir string) ([]fs.DirEntry, error) {
|
||||
func (r *ResolverFS) ReadDir(dir string) ([]fs.DirEntry, error) {
|
||||
fsPath, nestedFs, nestedFsPath, err := r.resolver.resolvePath(dir, r.rootFS.Open)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -56,16 +56,12 @@ func (r *ResolveFS) ReadDir(dir string) ([]fs.DirEntry, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nfs, err := r.resolver.nestedFs(filepath, file)
|
||||
nestedfs, err := r.resolver.nestedFs(filepath, file)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if e, ok := nfs.(fs.DirEntry); ok {
|
||||
out = append(out, e)
|
||||
} else {
|
||||
out = append(out, newDirInfo(e.Name()))
|
||||
}
|
||||
out = append(out, nestedfs)
|
||||
} else {
|
||||
out = append(out, e)
|
||||
}
|
||||
|
@ -74,7 +70,7 @@ func (r *ResolveFS) ReadDir(dir string) ([]fs.DirEntry, error) {
|
|||
}
|
||||
|
||||
// Stat implements Filesystem.
|
||||
func (r *ResolveFS) Stat(filename string) (fs.FileInfo, error) {
|
||||
func (r *ResolverFS) Stat(filename string) (fs.FileInfo, error) {
|
||||
fsPath, nestedFs, nestedFsPath, err := r.resolver.resolvePath(filename, r.rootFS.Open)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -87,7 +83,7 @@ func (r *ResolveFS) Stat(filename string) (fs.FileInfo, error) {
|
|||
}
|
||||
|
||||
// Unlink implements Filesystem.
|
||||
func (r *ResolveFS) Unlink(filename string) error {
|
||||
func (r *ResolverFS) Unlink(filename string) error {
|
||||
fsPath, nestedFs, nestedFsPath, err := r.resolver.resolvePath(filename, r.rootFS.Open)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -99,7 +95,27 @@ func (r *ResolveFS) Unlink(filename string) error {
|
|||
return r.rootFS.Unlink(fsPath)
|
||||
}
|
||||
|
||||
var _ Filesystem = &ResolveFS{}
|
||||
// Info implements Filesystem.
|
||||
func (r *ResolverFS) Info() (fs.FileInfo, error) {
|
||||
return newDirInfo(r.rootFS.Name()), nil
|
||||
}
|
||||
|
||||
// IsDir implements Filesystem.
|
||||
func (r *ResolverFS) IsDir() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// Name implements Filesystem.
|
||||
func (r *ResolverFS) Name() string {
|
||||
return r.Name()
|
||||
}
|
||||
|
||||
// Type implements Filesystem.
|
||||
func (r *ResolverFS) Type() fs.FileMode {
|
||||
return fs.ModeDir
|
||||
}
|
||||
|
||||
var _ Filesystem = &ResolverFS{}
|
||||
|
||||
type FsFactory func(f File) (Filesystem, error)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue