commit 95b619fdba1190fe65c98cc5b138ad114e8d772d
parent 8d89e48215955e21c4e96b81bd4be23b4bf89615
Author: Matsuda Kenji <info@mtkn.jp>
Date: Tue, 17 Oct 2023 11:33:54 +0900
delete File.Qid()
Diffstat:
2 files changed, 30 insertions(+), 9 deletions(-)
diff --git a/file.go b/file.go
@@ -13,7 +13,7 @@ type File interface {
// Child() ([]File, error) // Children
Stat() (*FileInfo, error)
- Qid() Qid
+// Qid() Qid
// Open(mode OpenMode) error
Close() error
io.Reader
diff --git a/server.go b/server.go
@@ -238,12 +238,16 @@ func sAttach(s *Server, r *Req) {
respond(r, fmt.Errorf("open root: %v", err))
return
}
-
fid.Uid = ifcall.UName()
fid.OMode = -1 // TODO: right?
+ st, err := fid.File.Stat()
+ if err != nil {
+ respond(r, fmt.Errorf("stat root: %v", err))
+ return
+ }
r.ofcall = &RAttach{
- qid: fid.File.Qid(),
+ qid: st.Sys().(*Stat).Qid,
}
respond(r, nil)
}
@@ -281,7 +285,12 @@ func sWalk(s *Server, r *Req) {
respond(r, fmt.Errorf("cannot clone open fid"))
return
}
- if ifcall.NWName() > 0 && oldFid.File.Qid().Type&QTDIR == 0 {
+ oldst, err := oldFid.File.Stat()
+ if err != nil {
+ respond(r, fmt.Errorf("stat: %v"))
+ return
+ }
+ if ifcall.NWName() > 0 && oldst.Sys().(*Stat).Qid.Type&QTDIR == 0 {
respond(r, fmt.Errorf("walk on non-dir"))
return
}
@@ -302,7 +311,7 @@ func sWalk(s *Server, r *Req) {
wqids := make([]Qid, ifcall.NWName())
cwdp := oldFid.path
cwdf := oldFid.File
- var err error
+ err = nil
var n int
for i, name := range ifcall.WName() {
cwdp = path.Join(cwdp, name)
@@ -361,7 +370,13 @@ func sOpen(s *Server, r *Req) {
// See open(5).
// In plan9 implementation, ifcall.Mode() is ANDed with ^ORCLOSE,
// but ORCLOSE is also prohibitted by the protocol...
- if r.fid.File.Qid().Type == QTDIR && ifcall.Mode() != OREAD {
+ st, err := r.fid.File.Stat()
+ if err != nil {
+ respond(r, fmt.Errorf("stat: %v", err))
+ return
+ }
+ qid := st.Sys().(*Stat).Qid
+ if qid.Type == QTDIR && ifcall.Mode() != OREAD {
respond(r, fmt.Errorf("is a directory"))
return
}
@@ -381,7 +396,7 @@ func sOpen(s *Server, r *Req) {
if ifcall.Mode()&OTRUNC != 0 {
p |= AWRITE
}
- if r.fid.File.Qid().Type&QTDIR != 0 && p != AREAD {
+ if qid.Type&QTDIR != 0 && p != AREAD {
respond(r, ErrPerm)
return
}
@@ -406,7 +421,7 @@ func sOpen(s *Server, r *Req) {
}
r.ofcall = &ROpen{
- qid: r.fid.File.Qid(),
+ qid: qid,
iounit: s.mSize() - IOHDRSZ,
}
respond(r, nil)
@@ -476,8 +491,14 @@ func sCreate(s *Server, r *Req) {
r.fid.File = file
r.fid.path = path.Join(r.fid.path, ifcall.Name())
+ st, err := r.fid.File.Stat()
+ if err != nil {
+ respond(r, fmt.Errorf("stat: %v", err))
+ return
+ }
+
r.ofcall = &RCreate{
- qid: r.fid.File.Qid(),
+ qid: st.Sys().(*Stat).Qid,
iounit: s.mSize() - IOHDRSZ,
}
respond(r, nil)