lib9p

Go 9P library.
Log | Files | Refs

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:
Mdisk_unix.go | 2+-
Mfs.go | 13++++++++-----
Mserver.go | 7+++++--
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 {