lib9p

Go 9P library.
Log | Files | Refs

commit 80811e8de92f50d1abf0b841e95da2d94cebb71f
parent 46230cb1709aaa193d16ad2a725e034735e46899
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Sat, 19 Aug 2023 12:25:21 +0900

douga mireta

Diffstat:
Mfile.go | 7+++----
Mfs.go | 10----------
Mserver.go | 28++++++++++++++++------------
Mtestdir/a | 1+
4 files changed, 20 insertions(+), 26 deletions(-)

diff --git a/file.go b/file.go @@ -154,7 +154,7 @@ type File struct { file fs.File // underlying file path string // absolute path from the root of the fs. - // System-modified data. Not in use. + // System-modified data. I don't know how to use. Type uint16 Dev uint32 @@ -170,7 +170,6 @@ type File struct { Muid string // last modifier name } - func openFile(fsys *FS, fpath string) (*File, error) { file, err := fsys.fs.Open(fpath) if err != nil { @@ -190,9 +189,9 @@ func openFile(fsys *FS, fpath string) (*File, error) { Atime: uint32(fsfi.ModTime().Unix()), Mtime: uint32(fsfi.ModTime().Unix()), Length: fsfi.Size(), - Uid: "kenji", + Uid: "kenji", // TODO: use syscall.Stat_t's Uid Gid: "kenji", - Muid: "kenji", + Muid: "", } qtype := fsModeToQidType(fsfi.Mode()) diff --git a/fs.go b/fs.go @@ -12,20 +12,10 @@ type FS struct { } func (fsys *FS) Open(name string) (*File, error) { - f, err := fsys.fs.Open(name) // fs.File - if err != nil { - return nil, fmt.Errorf("open file %s: %v", name, err) - } - file, err := openFile(fsys, name) if err != nil { return nil, fmt.Errorf("openFile(%v, %s): %v", fsys, name, err) } - fi, err := f.Stat() - if err != nil { - return nil, fmt.Errorf("stat file %s: %v", name, err) - } - file.Qid.SetType(fsModeToQidType(fi.Mode())) return file, nil } diff --git a/server.go b/server.go @@ -6,8 +6,8 @@ import ( "io/fs" "log" "os" - "strings" "path" + "strings" ) var chatty9P = false @@ -30,7 +30,7 @@ type Server struct { func NewServer(fsys fs.FS, mSize uint32, r io.Reader, w io.Writer) *Server { s := new(Server) s.fs = &FS{ - fs: fsys, + fs: fsys, qidPool: allocQidPool(), } s.MSize = mSize @@ -181,6 +181,8 @@ func sWalk(s *Server, r *Req) { wqids, err := s.fs.walk(oldFid.File.path, ifcall.WName()) if err != nil { + log.Printf("unko\n") + s.fPool.removeFid(ifcall.NewFid()) log.Printf("walk fs: %v", err) respond(r, fmt.Errorf("walk error")) return @@ -212,7 +214,8 @@ func sWalk(s *Server, r *Req) { respond(r, nil) } -func rWalk(r *Req, err error) {} +func rWalk(r *Req, err error) { +} func sOpen(s *Server, r *Req) { ifcall, ok := r.ifcall.(*TOpen) @@ -264,10 +267,10 @@ func sOpen(s *Server, r *Req) { return } /* - if !ok { - respond(r, fmt.Errorf("permission denied")) - return - } + if !ok { + respond(r, fmt.Errorf("permission denied")) + return + } */ if ifcall.Mode()&ORCLOSE != 0 { @@ -285,10 +288,7 @@ func sOpen(s *Server, r *Req) { func rOpen(r *Req, err error) {} func sRead(s *Server, r *Req) { - ifcall, ok := r.ifcall.(*TRead) - if !ok { - panic("not TRead") - } + ifcall := r.ifcall.(*TRead) fid, ok := s.fPool.lookupFid(ifcall.Fid()) if !ok { @@ -321,7 +321,8 @@ func sRead(s *Server, r *Req) { respond(r, err) return } - for _, e := range de { + for k := int(ifcall.Offset()); k < len(de); k++ { + e := de[k] info, err := e.Info() if err != nil { respond(r, err) @@ -332,6 +333,9 @@ func sRead(s *Server, r *Req) { panic("not stat") } buf := st.marshal() + if n+len(buf) > len(data) { + break + } for i := 0; i < len(buf); i++ { data[n+i] = buf[i] } diff --git a/testdir/a b/testdir/a @@ -0,0 +1 @@ +unko