commit 77c821cdc71917c6ced64fec11aae8b23b9e1997
parent e304c760455f17ff8245bdd15a0aa9fa27d02365
Author: Matsuda Kenji <info@mtkn.jp>
Date: Sat, 26 Aug 2023 13:29:46 +0900
change return value of fs.Open()
Diffstat:
3 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/disk_unix.go b/disk_unix.go
@@ -144,7 +144,7 @@ func (f *DiskFile) ReadDir(n int) ([]*DirEntry, error) {
de[i] = &DirEntry{
dirEnt: fsde[i],
info: info.(*FileInfo),
- file: file,
+ file: file.(File),
}
}
return de, nil
diff --git a/fs.go b/fs.go
@@ -1,20 +1,23 @@
package lib9p
import (
- "fmt"
"io/fs"
"path"
)
+type _FS interface {
+ Open(name string) (File, error)
+}
+
type FS struct {
fs fs.FS // underlying file system
qidPool *QidPool
}
-func (fsys *FS) Open(name string) (File, error) {
+func (fsys *FS) Open(name string) (fs.File, error) {
file, err := openFile(fsys, name)
if err != nil {
- return nil, fmt.Errorf("openFile(%v, %s): %v", fsys, name, err)
+ return nil, err
}
return file, nil
}
@@ -29,9 +32,9 @@ func (fsys *FS) walk(root string, wnames []string) ([]*Qid, error) {
return wqids, err
}
- qid, ok := fsys.qidPool.lookup(f) // TODO: use os.SameFile
+ qid, ok := fsys.qidPool.lookup(f.(File))
if !ok {
- qid, err = fsys.qidPool.alloc(f)
+ qid, err = fsys.qidPool.alloc(f.(File))
if err != nil {
return wqids, err
}
diff --git a/server.go b/server.go
@@ -132,11 +132,12 @@ func sAttach(s *Server, r *Req) {
return
}
- fid.File, err = s.fs.Open(".") // TODO: use aname?
+ f, err := s.fs.Open(".") // TODO: use aname?
if err != nil {
respond(r, fmt.Errorf("unable to open file tree"))
return
}
+ fid.File = f.(File)
fid.Uid = ifcall.UName()
fid.OMode = OREAD
@@ -189,12 +190,14 @@ func sWalk(s *Server, r *Req) {
relPath := path.Join(ifcall.WName()...)
absPath := path.Join(oldFid.File.pathName(), relPath)
- newFid.File, err = s.fs.Open(absPath)
+ f, err := s.fs.Open(absPath)
if err != nil {
log.Printf("open root dir: %v", err)
respond(r, fmt.Errorf("internal error"))
return
}
+ newFid.File = f.(File)
+
newFid.Uid = oldFid.Uid
info, err := newFid.File.Stat()
if err != nil {