lib9p

Go 9P library.
Log | Files | Refs | LICENSE

commit 826c8bc4edcfdc7ec551274af4d0b4f34f1f3d62
parent bf342a1b06685ce941ca56342657c15d4cf32e67
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Mon, 18 Dec 2023 08:35:52 +0900

change sAttach and sWalk not to Open the assosiated file

Diffstat:
Mserver.go | 34++++++++++------------------------
1 file changed, 10 insertions(+), 24 deletions(-)

diff --git a/server.go b/server.go @@ -278,14 +278,10 @@ func sAttach(ctx context.Context, s *Server, r *Req) { return } } - fid.File, err = s.fs.OpenFile(".", OREAD) - if err != nil { - Respond(ctx, r, fmt.Errorf("open root: %v", err)) - return - } + fid.OMode = -1 + fid.path = "." fid.Uid = ifcall.Uname - fid.OMode = -1 // TODO: right? - st, err := fid.File.Stat() + st, err := fs.Stat(ExportFS{s.fs}, ".") if err != nil { Respond(ctx, r, fmt.Errorf("stat root: %v", err)) return @@ -328,7 +324,7 @@ func sWalk(ctx context.Context, s *Server, r *Req) { Respond(ctx, r, fmt.Errorf("cannot clone open fid")) return } - oldst, err := oldFid.File.Stat() + oldst, err := fs.Stat(ExportFS{s.fs}, oldFid.path) if err != nil { Respond(ctx, r, fmt.Errorf("stat: %v", err)) return @@ -351,32 +347,20 @@ func sWalk(ctx context.Context, s *Server, r *Req) { } wqids := make([]Qid, len(ifcall.Wnames)) cwdp := oldFid.path - cwdf := oldFid.File - err = nil var n int // TODO: replace this block with fs.WalkDir. for i, name := range ifcall.Wnames { - if i > 0 { - if err := cwdf.Close(); err != nil { - log.Printf("close: %v", err) - break - } - } cwdp = path.Join(cwdp, name) - cwdf, err = s.fs.OpenFile(cwdp, OREAD) - if err != nil { - break - } - stat, err := cwdf.Stat() + stat, err := fs.Stat(ExportFS{s.fs}, cwdp) if err != nil { break } wqids[i] = stat.Sys().(*Stat).Qid n++ } - newFid.File = cwdf - newFid.Uid = oldFid.Uid + newFid.OMode = -1 newFid.path = cwdp + newFid.Uid = oldFid.Uid r.Ofcall = &RWalk{ Qids: wqids[:n], } @@ -727,7 +711,8 @@ func sClunk(ctx context.Context, s *Server, r *Req) { return } s.fPool.delete(ifcall.Fid) - if fid.OMode != -1 { + //if fid.OMode != -1 { + if fid.File != nil { if err := fid.File.Close(); err != nil { Respond(ctx, r, fmt.Errorf("close: %v", err)) return @@ -740,6 +725,7 @@ func sClunk(ctx context.Context, s *Server, r *Req) { func rClunk(r *Req, err error) { if err != nil { log.Printf("clunk: %v", err) + r.Ofcall = &RClunk{} } }