lib9p

Go 9P library.
Log | Files | Refs

commit 313b6879b2f60c28004e9eda258401e950886a0e
parent 6653f26fb9ecafaf1e347b8addf2e7e8992e4b11
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Tue, 17 Oct 2023 07:18:46 +0900

remove File.Parent()

Diffstat:
Mdiskfs/stat_unix.go | 5++++-
Mfile.go | 2+-
Mserver.go | 22+++++++++++++++++-----
3 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/diskfs/stat_unix.go b/diskfs/stat_unix.go @@ -64,7 +64,10 @@ func (f *File) WStat(s *lib9p.Stat) error { oldStat := fi.Sys().(*lib9p.Stat) if s.Name != oldStat.Name { - if err := os.Rename(oldStat.Name, s.Name); err != nil { + // TODO: check neither Names contains "/" + oldpath := path.Join(f.fs.rootPath, path.Dir(f.path), oldStat.Name) + newpath := path.Join(f.fs.rootPath, path.Dir(f.path), s.Name) + if err := os.Rename(oldpath, newpath); err != nil { return fmt.Errorf("rename: %v", err) } } diff --git a/file.go b/file.go @@ -9,7 +9,7 @@ import ( ) type File interface { - Parent() (File, error) +// Parent() (File, error) Child() ([]File, error) // Children Stat() (*FileInfo, error) diff --git a/server.go b/server.go @@ -392,7 +392,8 @@ func sOpen(s *Server, r *Req) { } if ifcall.Mode()&ORCLOSE != 0 { - parent, err := r.fid.File.Parent() + parentPath := path.Dir(r.fid.path) + parent, err := s.fs.Open(parentPath, OREAD, 0) defer parent.Close() if err != nil { respond(r, fmt.Errorf("open parent")) @@ -661,11 +662,13 @@ func sRemove(s *Server, r *Req) { } defer s.fPool.delete(ifcall.Fid()) - parent, err := r.fid.File.Parent() + parentPath := path.Dir(r.fid.path) + parent, err := s.fs.Open(parentPath, OREAD, 0) if err != nil { respond(r, fmt.Errorf("open parent: %v", err)) return } + defer parent.Close() if !hasPerm(parent, r.fid.Uid, AWRITE) { respond(r, ErrPerm) return @@ -708,7 +711,11 @@ func sStat(s *Server, r *Req) { respond(r, nil) } -func rStat(r *Req, err error) {} +func rStat(r *Req, err error) { + if err != nil { + setError(r, err) + } +} func sWStat(s *Server, r *Req) { ifcall := r.ifcall.(*TWStat) @@ -742,7 +749,8 @@ func sWStat(s *Server, r *Req) { } if wstat.Name != "" { - parent, err := r.fid.File.Parent() + parentPath := path.Dir(r.fid.path) + parent, err := s.fs.Open(parentPath, OREAD, 0) if err != nil { respond(r, fmt.Errorf("get parent: %v", err)) return @@ -815,7 +823,11 @@ func sWStat(s *Server, r *Req) { respond(r, nil) } -func rWStat(r *Req, err error) {} +func rWStat(r *Req, err error) { + if err != nil { + setError(r, err) + } +} func (s *Server) Serve() { L: