lib9p

Go 9P library.
Log | Files | Refs

commit a18138e77f5a6b6346df1e2002ae444778ac8e04
parent 5864dedab4c71643268b3d27b18d371697a35f21
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Fri,  1 Sep 2023 10:43:05 +0900

change Qid from pointer to value

Diffstat:
Mcmd/numfs.go | 18++----------------
Mfcall.go | 8++++----
Mfid.go | 2+-
Miofs/file.go | 16+---------------
Miofs/stat.go | 8++++----
Mqid.go | 18+++++++++---------
Mstat.go | 18+++++++++++++++++-
7 files changed, 38 insertions(+), 50 deletions(-)

diff --git a/cmd/numfs.go b/cmd/numfs.go @@ -61,21 +61,7 @@ type numFile struct { } func (f *numFile) Stat() (fs.FileInfo, error) { - qid := f.Qid() - return &FileInfo{ - Stat: &lib9p.Stat{ - Type: f.Type(), - Dev: f.Dev(), - Qid: &qid, - Mode: f.Mode(), - Atime: f.Atime(), - Mtime: f.Mtime(), - Length: f.Length(), - Name: f.Name(), - Uid: f.Uid(), - Gid: f.Gid(), - Muid: f.Muid(), - }}, nil + return &FileInfo{Stat:lib9p.StatFromFile(f)}, nil } func (f *numFile) Read(p []byte) (int, error) { if f.id == -1 { @@ -166,7 +152,7 @@ func (fi *FileInfo) Mode() fs.FileMode { return lib9p.Mode9ToFSMode(fi.Stat.Mod func (fi *FileInfo) ModTime() time.Time { return time.Unix(int64(fi.Stat.Mtime), 0) } func (fi *FileInfo) IsDir() bool { return fi.Stat.Mode&lib9p.DMDIR != 0 } func (fi *FileInfo) Sys() any { return fi.Stat } -func (fi *FileInfo) Qid() *lib9p.Qid { return fi.Stat.Qid } +func (fi *FileInfo) Qid() lib9p.Qid { return fi.Stat.Qid } var dFlag = flag.Bool("D", false, "Prints chatty message to the stderr.") diff --git a/fcall.go b/fcall.go @@ -343,14 +343,14 @@ func (msg TAttach) String() string { type RAttach struct { tag uint16 - qid *Qid + qid Qid } func newRAttach(buf []byte) *RAttach { panic("not implemented") } func (msg RAttach) Size() uint32 { return 4 + 1 + 2 + 13 } func (msg RAttach) Type() MsgType { return Rattach } func (msg RAttach) Tag() uint16 { return msg.tag } -func (msg RAttach) Qid() *Qid { return msg.qid } +func (msg RAttach) Qid() Qid { return msg.qid } func (msg RAttach) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -586,7 +586,7 @@ func (msg *TOpen) String() string { type ROpen struct { tag uint16 - qid *Qid + qid Qid iounit uint32 } @@ -596,7 +596,7 @@ func (msg *ROpen) Size() uint32 { } func (msg *ROpen) Type() MsgType { return Ropen } func (msg *ROpen) Tag() uint16 { return msg.tag } -func (msg *ROpen) Qid() *Qid { return msg.qid } +func (msg *ROpen) Qid() Qid { return msg.qid } func (msg *ROpen) IoUnit() uint32 { return msg.iounit } func (msg *ROpen) marshal() []byte { cur := 0 diff --git a/fid.go b/fid.go @@ -21,7 +21,7 @@ type Fid struct { OMode OpenMode /* -1 = not open */ File File Uid string - Qid *Qid + Qid Qid } const NOFID = ^uint32(0) diff --git a/iofs/file.go b/iofs/file.go @@ -102,21 +102,7 @@ func (f *File) Muid() string { } func (f *File) Stat() (fs.FileInfo, error) { - qid := f.Qid() - fi := &FileInfo{ - Stat: &lib9p.Stat{ - Qid: &qid, - Name: f.Name(), - Mode: f.Mode(), - Atime: f.Atime(), - Mtime: f.Mtime(), - Length: f.Length(), - Uid: f.Uid(), - Gid: f.Gid(), - Muid: f.Muid(), - }, - } - return fi, nil + return &FileInfo{Stat: lib9p.StatFromFile(f)}, nil } func (f *File) Close() error { diff --git a/iofs/stat.go b/iofs/stat.go @@ -17,7 +17,7 @@ func (fi *FileInfo) Mode() fs.FileMode { return lib9p.Mode9ToFSMode(fi.Stat.Mod func (fi *FileInfo) ModTime() time.Time { return time.Unix(int64(fi.Stat.Mtime), 0) } func (fi *FileInfo) IsDir() bool { return fi.Stat.Mode&lib9p.DMDIR != 0 } func (fi *FileInfo) Sys() any { return fi.Stat } -func (fi *FileInfo) Qid() *lib9p.Qid { return fi.Sys().(*lib9p.Stat).Qid } +func (fi *FileInfo) Qid() lib9p.Qid { return fi.Sys().(*lib9p.Stat).Qid } func fiType(fi fs.FileInfo) uint16 { return 0 } func fiDev(fi fs.FileInfo) uint32 { return 0 } @@ -30,10 +30,10 @@ func fiUid(fi fs.FileInfo) string { return "" } func fiGid(fi fs.FileInfo) string { return "" } func fiMuid(fi fs.FileInfo) string { return "" } -func fiQid(pool *QidPool, id fileID, fi fs.FileInfo) (*lib9p.Qid, error) { +func fiQid(pool *QidPool, id fileID, fi fs.FileInfo) (lib9p.Qid, error) { qid, ok := pool.m[id] if ok { - return &qid, nil + return qid, nil } qtype := lib9p.FSModeToQidType(fi.Mode()) qid = lib9p.Qid{ @@ -42,7 +42,7 @@ func fiQid(pool *QidPool, id fileID, fi fs.FileInfo) (*lib9p.Qid, error) { } pool.m[id] = qid pool.nextQid++ - return &qid, nil + return qid, nil } func fiStat(pool *QidPool, id fileID, fi fs.FileInfo) *lib9p.Stat { diff --git a/qid.go b/qid.go @@ -32,27 +32,27 @@ func newQid(b []byte) *Qid { } } /* -func (q *Qid) Type() QidType { return q.Type } -func (q *Qid) SetType(t QidType) { q.t = t } -func (q *Qid) Vers() uint32 { return q.vers } -func (q *Qid) SetVers(v uint32) { q.vers = v } -func (q *Qid) Path() uint64 { return q.path } -func (q *Qid) SetPath(p uint64) { q.path = p } +func (q Qid) Type() QidType { return q.Type } +func (q Qid) SetType(t QidType) { q.t = t } +func (q Qid) Vers() uint32 { return q.vers } +func (q Qid) SetVers(v uint32) { q.vers = v } +func (q Qid) Path() uint64 { return q.path } +func (q Qid) SetPath(p uint64) { q.path = p } */ -func (q *Qid) marshal() []byte { +func (q Qid) marshal() []byte { buf := make([]byte, 13) buf[0] = uint8(q.Type) pbit32(buf[1:5], q.Vers) pbit64(buf[5:13], q.Path) return buf } -func (q *Qid) String() string { +func (q Qid) String() string { return fmt.Sprintf("(%016d %d %s)", q.Path, q.Vers, q.typeStr()) } // TypeStr returns the q.Type() as string for debugging information. -func (q *Qid) typeStr() string { +func (q Qid) typeStr() string { var s string t := q.Type if t&QTDIR != 0 { diff --git a/stat.go b/stat.go @@ -23,7 +23,7 @@ const ( type Stat struct { Type uint16 Dev uint32 - Qid *Qid + Qid Qid Mode FileMode Atime uint32 Mtime uint32 @@ -34,6 +34,22 @@ type Stat struct { Muid string } +func StatFromFile(f File) *Stat { + return &Stat{ + Type: f.Type(), + Dev: f.Dev(), + Qid: f.Qid(), + Mode: f.Mode(), + Atime: f.Atime(), + Mtime: f.Mtime(), + Length: f.Length(), + Name: f.Name(), + Uid: f.Uid(), + Gid: f.Gid(), + Muid: f.Muid(), + } +} + func (s *Stat) size() uint16 { // type + dev + qid + mode + atime + mtime + length return uint16(2 + 4 + 13 + 4 + 4 + 4 + 8 +