commit 00b26b4988bbb915517dceeb76a6e7477ad2a8c7
parent 15ba8017d53f53facd5a1f8917cbc721c06c22b6
Author: Matsuda Kenji <info@mtkn.jp>
Date: Thu, 31 Aug 2023 13:41:06 +0900
delete FileInfo
Diffstat:
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