commit 500acf7e5832f0ed06e6a2a2fa502c0054020d76
parent cba1021e524a60053976a45ec5ffad107847161e
Author: Matsuda Kenji <info@mtkn.jp>
Date: Sun, 20 Aug 2023 13:20:29 +0900
add sameFile()
Diffstat:
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)
}
}