lib9p

Go 9P library.
Log | Files | Refs

commit 46230cb1709aaa193d16ad2a725e034735e46899
parent ea1501ebf1c9693cab43910e78eec1573a8a06bd
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Fri, 18 Aug 2023 12:26:33 +0900

change File

Diffstat:
Mfile.go | 53+++++++++++++++++++++++++++++++----------------------
Mfs.go | 5++---
Mtestdir/d/unko | 1+
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