commit 313b6879b2f60c28004e9eda258401e950886a0e
parent 6653f26fb9ecafaf1e347b8addf2e7e8992e4b11
Author: Matsuda Kenji <info@mtkn.jp>
Date: Tue, 17 Oct 2023 07:18:46 +0900
remove File.Parent()
Diffstat:
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: