lib9p

Go 9P library.
Log | Files | Refs

commit 500acf7e5832f0ed06e6a2a2fa502c0054020d76
parent cba1021e524a60053976a45ec5ffad107847161e
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Sun, 20 Aug 2023 13:20:29 +0900

add sameFile()

Diffstat:
Mfile.go | 15+++++++++++++++
Mpool.go | 5++---
2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/file.go b/file.go @@ -4,6 +4,7 @@ import ( "fmt" "io" "io/fs" + "os" "path" "time" ) @@ -148,6 +149,7 @@ func (fi *FileInfo) Mode() fs.FileMode { return fi.info.Mode() } func (fi *FileInfo) ModTime() time.Time { return fi.info.ModTime() } func (fi *FileInfo) IsDir() bool { return fi.info.IsDir() } func (fi *FileInfo) Sys() any { return fi.stat } +func (fi *FileInfo) Qid() *Qid { return fi.Sys().(*stat).qid } type File struct { fs *FS // file system to which this file belongs @@ -175,6 +177,19 @@ type File struct { */ } +type hasQid interface { + Qid() *Qid +} + +func sameFile(fi0, fi1 fs.FileInfo) bool { + if hq0, ok := fi0.(hasQid); ok { + if hq1, ok := fi1.(hasQid); ok { + return hq0.Qid().Path() == hq1.Qid().Path() + } + } + return os.SameFile(fi0, fi1) +} + func openFile(fsys *FS, fpath string) (*File, error) { file, err := fsys.fs.Open(fpath) if err != nil { diff --git a/pool.go b/pool.go @@ -3,7 +3,6 @@ package lib9p import ( "fmt" "io/fs" - "os" ) type QidPool struct { @@ -19,7 +18,7 @@ func allocQidPool() *QidPool { func (pool *QidPool) lookup(fi fs.FileInfo) (*Qid, bool) { for fi1, qid := range pool.m { - if os.SameFile(fi, fi1) { + if sameFile(fi, fi1) { return qid, true } } @@ -28,7 +27,7 @@ func (pool *QidPool) lookup(fi fs.FileInfo) (*Qid, bool) { func (pool *QidPool) delete(fi fs.FileInfo) { for fi1, _ := range pool.m { - if os.SameFile(fi, fi1) { + if sameFile(fi, fi1) { delete(pool.m, fi1) } }