commit 0c2157f07221fb65ae9222cedf34cf559b2b3bbd
parent e02cbb498335d20ede00a4487e12b9e0a5d5c75c
Author: Matsuda Kenji <info@mtkn.jp>
Date: Thu, 7 Sep 2023 09:55:50 +0900
restore
Diffstat:
5 files changed, 33 insertions(+), 74 deletions(-)
diff --git a/file.go b/file.go
@@ -6,7 +6,7 @@ import (
type File interface {
fs.File
-// PathName() string // path from the root of the fs which this file belongs to.
+ PathName() string // path from the root of the fs which this file belongs to.
}
type ReadDirFile interface {
diff --git a/fs.go b/fs.go
@@ -18,7 +18,11 @@ func walk(fsys FS, root string, wnames []string) ([]Qid, error) {
if err != nil {
return wqids, err
}
- qid := f.Qid()
+ fi, err := f.Stat()
+ if err != nil {
+ return wqids, err
+ }
+ qid := fi.(*FileInfo).Qid()
wqids[i] = qid
}
return wqids, nil
diff --git a/iofs/file.go b/iofs/file.go
@@ -4,7 +4,6 @@ import (
"fmt"
"io"
"io/fs"
- "log"
"path"
"lib9p"
@@ -30,78 +29,33 @@ func openFile(fsys *FS, fpath string) (*File, error) {
}
func (f *File) PathName() string { return f.path }
-func (f *File) Type() uint16 { return 0 }
-func (f *File) Dev() uint32 { return 0 }
-func (f *File) Qid() lib9p.Qid {
- qid, ok := f.fs.qidPool.lookup(f)
- if ok {
- return qid
- }
- qid, err := f.fs.qidPool.alloc(f)
- if err != nil {
- panic(fmt.Errorf("alloc qid: %v", err))
- }
- return qid
-}
-
-func (f *File) Length() int64 {
- fi, err := f.file.Stat()
- if err != nil {
- log.Printf("stat: %v", err)
- return 0
- }
- return fi.Size()
-}
-func (f *File) Mode() lib9p.FileMode {
- fi, err := f.file.Stat()
- if err != nil {
- log.Printf("stat: %v", err)
- return 0
- }
- return lib9p.FSModeTo9Mode(fi.Mode())
-}
-func (f *File) Name() string {
- fi, err := f.file.Stat()
- if err != nil {
- log.Printf("stat: %v", err)
- return ""
- }
- return fi.Name()
-}
-
-func (f *File) Atime() uint32 {
- fi, err := f.file.Stat()
+func (f *File) Stat() (fs.FileInfo, error) {
+ fsfi, err := f.file.Stat()
if err != nil {
- log.Printf("stat error: %v", err)
- return 0 // TODO: error check?
+ return nil, fmt.Errorf("stat: %v")
}
- return uint32(fi.ModTime().Unix())
-}
-func (f *File) Mtime() uint32 {
- fi, err := f.file.Stat()
- if err != nil {
- log.Printf("stat error: %v", err)
- return 0 // TODO: error check?
+ var stat lib9p.Stat
+ stat.Type = 0
+ stat.Dev = 0
+ qid, ok := f.fs.qidPool.lookup(f)
+ if !ok {
+ qid, err = f.fs.qidPool.alloc(f)
+ if err != nil {
+ panic(fmt.Errorf("alloc qid: %v", err))
+ }
}
- return uint32(fi.ModTime().Unix())
-}
-
-func (f *File) Uid() string {
- return ""
-}
-
-func (f *File) Gid() string {
- return ""
-}
-
-func (f *File) Muid() string {
- return ""
-}
-
-func (f *File) Stat() (fs.FileInfo, error) {
- return &lib9p.FileInfo{Stat: *lib9p.StatFromFile(f)}, nil
+ stat.Qid = qid
+ stat.Length = fsfi.Size()
+ stat.Mode = lib9p.FSModeTo9Mode(fsfi.Mode())
+ stat.Name = fsfi.Name()
+ stat.Atime = uint32(fsfi.ModTime().Unix())
+ stat.Mtime = uint32(fsfi.ModTime().Unix())
+ stat.Uid = ""
+ stat.Gid = ""
+ stat.Muid = ""
+ return &lib9p.FileInfo{stat}, nil
}
func (f *File) Close() error {
diff --git a/iofs/qid.go b/iofs/qid.go
@@ -44,7 +44,11 @@ func (pool *QidPool) lookup(f *File) (lib9p.Qid, bool) {
return lib9p.Qid{}, false
}
- mtime := time.Unix(int64(f.Mtime()), 0)
+ stat, err := f.file.Stat()
+ if err != nil {
+ return lib9p.Qid{}, false
+ }
+ mtime := stat.ModTime()
if qreq.mtime.Before(mtime) {
qreq.qid.Vers++
qreq.mtime = mtime
diff --git a/stat.go b/stat.go
@@ -171,8 +171,6 @@ func (s *Stat) String() string {
type FileInfo struct {
Stat Stat
- Path string
- Fsys FS
}
func (fi *FileInfo) Name() string { return fi.Stat.Name }
@@ -182,7 +180,6 @@ 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.Stat.Qid }
-func (fi *FileInfo) File() (File, error) { return fi.Fsys.Open(fi.Path) }
type DirEntry = FileInfo