lib9p

Go 9P library.
Log | Files | Refs

commit 00b26b4988bbb915517dceeb76a6e7477ad2a8c7
parent 15ba8017d53f53facd5a1f8917cbc721c06c22b6
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Thu, 31 Aug 2023 13:41:06 +0900

delete FileInfo

Diffstat:
Mfcall.go | 5+++--
Mfile.go | 15+++++++++------
Miofs/file.go | 4++--
Miofs/stat.go | 13+++++++++++++
Mserver.go | 2+-
5 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/fcall.go b/fcall.go @@ -2,6 +2,7 @@ package lib9p import ( "fmt" + "io/fs" ) type MsgType uint8 @@ -823,7 +824,7 @@ func (msg *TStat) String() string { type RStat struct { tag uint16 - info *FileInfo + info fs.FileInfo } func newRStat(buf []byte) *RStat { panic("not implemented") } @@ -854,5 +855,5 @@ func (msg *RStat) marshal() []byte { } func (msg *RStat) String() string { - return fmt.Sprintf("Rstat tag %d Stat %s", msg.Tag(), msg.info.Stat) + return fmt.Sprintf("Rstat tag %d Stat %s", msg.Tag(), msg.info.Sys().(*Stat)) } diff --git a/file.go b/file.go @@ -3,7 +3,7 @@ package lib9p import ( "fmt" "io/fs" - "time" +// "time" ) type FileMode uint32 @@ -106,6 +106,8 @@ func (s *Stat) String() string { s.Atime, s.Mtime, s.Length, s.Type, s.Dev) } +// Sys must return Stat struct. +/* type FileInfo struct { Stat *Stat } @@ -117,6 +119,7 @@ func (fi *FileInfo) ModTime() time.Time { return time.Unix(int64(fi.Stat.Mtime), func (fi *FileInfo) IsDir() bool { return fi.Stat.Mode&DMDIR != 0 } func (fi *FileInfo) Sys() any { return fi.Stat } func (fi *FileInfo) Qid() *Qid { return fi.Sys().(*Stat).Qid } +*/ type File interface { fs.File @@ -141,10 +144,10 @@ type ReadDirFile interface { } type DirEntry struct { - Stat *Stat + FileInfo fs.FileInfo } -func (e *DirEntry) Name() string { return e.Stat.Name } -func (e *DirEntry) IsDir() bool { return e.Stat.Mode&DMDIR != 0 } -func (e *DirEntry) Type() fs.FileMode { return Mode9ToFSMode(e.Stat.Mode) } -func (e *DirEntry) Info() (*FileInfo, error) { return &FileInfo{e.Stat}, nil } +func (e *DirEntry) Name() string { return e.FileInfo.Name() } +func (e *DirEntry) IsDir() bool { return e.FileInfo.IsDir() } +func (e *DirEntry) Type() fs.FileMode { return e.FileInfo.Mode().Type() } +func (e *DirEntry) Info() (fs.FileInfo, error) { return e.FileInfo, nil } diff --git a/iofs/file.go b/iofs/file.go @@ -103,7 +103,7 @@ func (f *File) Muid() string { func (f *File) Stat() (fs.FileInfo, error) { qid := f.Qid() - fi := &lib9p.FileInfo{ + fi := &FileInfo{ Stat: &lib9p.Stat{ Qid: &qid, Name: f.Name(), @@ -159,7 +159,7 @@ func (f *File) ReadDir(n int) ([]*lib9p.DirEntry, error) { fpath := path.Join(f.path, info.Name()) de[i] = &lib9p.DirEntry{ - Stat: fiStat(f.fs.qidPool, fileID(fpath), info), + FileInfo: &FileInfo{fiStat(f.fs.qidPool, fileID(fpath), info)}, } } return de, nil diff --git a/iofs/stat.go b/iofs/stat.go @@ -2,10 +2,23 @@ package iofs import ( "io/fs" + "time" "lib9p" ) +type FileInfo struct { + Stat *lib9p.Stat +} + +func (fi *FileInfo) Name() string { return fi.Stat.Name } +func (fi *FileInfo) Size() int64 { return fi.Stat.Length } +func (fi *FileInfo) Mode() fs.FileMode { return lib9p.Mode9ToFSMode(fi.Stat.Mode) } +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 fiType(fi fs.FileInfo) uint16 { return 0 } func fiDev(fi fs.FileInfo) uint32 { return 0 } func fiLength(fi fs.FileInfo) int64 { return fi.Size() } diff --git a/server.go b/server.go @@ -389,7 +389,7 @@ func sStat(s *Server, r *Req) { ofcall := &RStat{ tag: ifcall.Tag(), - info: fileInfo.(*FileInfo), + info: fileInfo, } r.ofcall = ofcall