diff --git a/internal/file/file_notjs.go b/internal/file/file_notjs.go index d6f5a8b12..f9428b85b 100644 --- a/internal/file/file_notjs.go +++ b/internal/file/file_notjs.go @@ -29,15 +29,22 @@ import ( ) type VirtualFS struct { - root virtualFSRoot + paths []string } func NewVirtualFS(paths []string) *VirtualFS { fs := &VirtualFS{} - fs.root.addRealPaths(paths) + fs.paths = make([]string, len(paths)) + copy(fs.paths, paths) return fs } +func (v *VirtualFS) newRootFS() *virtualFSRoot { + var root virtualFSRoot + root.addRealPaths(v.paths) + return &root +} + func (v *VirtualFS) Open(name string) (fs.File, error) { if !fs.ValidPath(name) { return nil, &fs.PathError{ @@ -48,15 +55,16 @@ func (v *VirtualFS) Open(name string) (fs.File, error) { } if name == "." { - return &v.root, nil + return v.newRootFS(), nil } // A valid path must not include a token "." or "..", except for "." itself. es := strings.Split(name, "/") - for _, realPath := range v.root.realPaths { + for _, realPath := range v.paths { if filepath.Base(realPath) != es[0] { continue } + // TODO: Does this work on Windows? return os.Open(filepath.Join(append([]string{realPath}, es[1:]...)...)) }