commit 46230cb1709aaa193d16ad2a725e034735e46899
parent ea1501ebf1c9693cab43910e78eec1573a8a06bd
Author: Matsuda Kenji <info@mtkn.jp>
Date: Fri, 18 Aug 2023 12:26:33 +0900
change File
Diffstat:
3 files changed, 34 insertions(+), 25 deletions(-)
diff --git a/file.go b/file.go
@@ -159,8 +159,8 @@ type File struct {
Dev uint32
// File data
- Qid *Qid // unique id from server
- Mode uint32 // permissions
+ Qid Qid // unique id from server
+ Mode FileMode // permissions
Atime uint32 // last read time
Mtime uint32 // last write time
Length int64 // file length
@@ -170,32 +170,41 @@ type File struct {
Muid string // last modifier name
}
-func (f *File) Marshal(b []byte) (n int, err error) {
- panic("not inplemented")
-}
-func newFile(fsys *FS, path string) (*File, error) {
- file, err := fsys.fs.Open(path)
+
+func openFile(fsys *FS, fpath string) (*File, error) {
+ file, err := fsys.fs.Open(fpath)
if err != nil {
return nil, fmt.Errorf("open fs: %v", err)
}
+ fsfi, err := file.Stat()
+ if err != nil {
+ return nil, fmt.Errorf("stat file: %v", err)
+ }
f := &File{
fs: fsys,
file: file,
- path: path,
- }
- s, err := f.file.Stat()
- if err != nil {
- return nil, fmt.Errorf("stat %v: %v", f.file, err)
+ path: fpath,
+
+ Name: path.Base(fpath),
+ Mode: fsModeTo9Mode(fsfi.Mode()),
+ Atime: uint32(fsfi.ModTime().Unix()),
+ Mtime: uint32(fsfi.ModTime().Unix()),
+ Length: fsfi.Size(),
+ Uid: "kenji",
+ Gid: "kenji",
+ Muid: "kenji",
}
- qtype := fsModeToQidType(s.Mode())
- q, ok := fsys.qidPool.lookup(path)
+
+ qtype := fsModeToQidType(fsfi.Mode())
+ q, ok := fsys.qidPool.lookup(fpath)
if !ok {
- q, err = fsys.qidPool.alloc(path, qtype)
+ q, err = fsys.qidPool.alloc(fpath, qtype)
if err != nil {
return nil, fmt.Errorf("alloc qid for file %v: %v", file, err)
}
}
- f.Qid = q
+ f.Qid = *q
+
return f, nil
}
@@ -207,15 +216,15 @@ func (f *File) Stat() (*FileInfo, error) {
fi := &FileInfo{
info: fsfi,
stat: &stat{
- qid: f.Qid,
- name: path.Base(f.path),
+ qid: &f.Qid,
+ name: f.Name,
mode: fsModeTo9Mode(fsfi.Mode()),
aTime: uint32(fsfi.ModTime().Unix()),
mTime: uint32(fsfi.ModTime().Unix()),
- length: fsfi.Size(),
- uid: "kenji",
- gid: "kenji",
- muid: "kenji",
+ length: f.Length,
+ uid: f.Uid,
+ gid: f.Gid,
+ muid: f.Muid,
},
// TODO: ..., uid, gid, muid
}
diff --git a/fs.go b/fs.go
@@ -17,11 +17,10 @@ func (fsys *FS) Open(name string) (*File, error) {
return nil, fmt.Errorf("open file %s: %v", name, err)
}
- file, err := newFile(fsys, name)
+ file, err := openFile(fsys, name)
if err != nil {
- return nil, fmt.Errorf("newFile(%v, %s): %v", fsys, name, err)
+ return nil, fmt.Errorf("openFile(%v, %s): %v", fsys, name, err)
}
- file.path = name
fi, err := f.Stat()
if err != nil {
return nil, fmt.Errorf("stat file %s: %v", name, err)
diff --git a/testdir/d/unko b/testdir/d/unko
@@ -1 +1,2 @@
unko
+unko