diff options
| -rw-r--r-- | back/cmd/authfs/authfs.go | 67 | ||||
| -rw-r--r-- | back/cmd/authfs/err.go | 2 |
2 files changed, 41 insertions, 28 deletions
diff --git a/back/cmd/authfs/authfs.go b/back/cmd/authfs/authfs.go index 5493606..f3756af 100644 --- a/back/cmd/authfs/authfs.go +++ b/back/cmd/authfs/authfs.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "fmt" "path" "sync" @@ -122,9 +123,9 @@ func (fs *Authfs) Rattach(fid, afid p9.FID, uname, aname string) (p9.QID, error) } func (fs *Authfs) Rwalk(fid, newfid p9.FID, paths []string) ([]p9.QID, error) { - f, err := fs.getFile(fid) - if err != nil { - return nil, err + f, ok := fs.getFile(fid) + if !ok { + return nil, ErrFidNotExist } var qids []p9.QID @@ -133,6 +134,7 @@ func (fs *Authfs) Rwalk(fid, newfid p9.FID, paths []string) ([]p9.QID, error) { if !ok { return qids, ErrWalkNonDir } + var err error f, err = dir.Walk(paths[i]) if err != nil { return qids, err @@ -148,28 +150,17 @@ func (fs *Authfs) Rwalk(fid, newfid p9.FID, paths []string) ([]p9.QID, error) { defer fs.mu.Unlock() if newfid != fid { if _, ok := fs.files[newfid]; ok { - return nil, fmt.Errorf("newfid in use: walk to %v, fid %v, newfid %v", paths, fid, newfid) + return nil, ErrNewfidExist } } fs.files[newfid] = f return qids, nil } -func (fs *Authfs) Rclunk(fid p9.FID) error { - fs.mu.Lock() - defer fs.mu.Unlock() - - if _, exists := fs.files[fid]; !exists { - return ErrFidNotExist - } - delete(fs.files, fid) - return nil -} - func (fs *Authfs) Ropen(fid p9.FID, mode p9.Mode) (p9.QID, p9.MaxSize, error) { - f, err := fs.getFile(fid) - if err != nil { - return p9.QID{}, 0, err + f, ok := fs.getFile(fid) + if !ok { + return p9.QID{}, 0, ErrFidNotExist } if err := f.Open(mode); err != nil { return p9.QID{}, 0, err @@ -179,9 +170,9 @@ func (fs *Authfs) Ropen(fid p9.FID, mode p9.Mode) (p9.QID, p9.MaxSize, error) { } func (fs *Authfs) Rcreate(fid p9.FID, name string, perm p9.Perm, mode p9.Mode) (p9.QID, p9.MaxSize, error) { - f, err := fs.getFile(fid) - if err != nil { - return p9.QID{}, 0, err + f, ok := fs.getFile(fid) + if !ok { + return p9.QID{}, 0, ErrFidNotExist } dir, ok := f.(Dir) if !ok { @@ -195,6 +186,31 @@ func (fs *Authfs) Rcreate(fid p9.FID, name string, perm p9.Perm, mode p9.Mode) ( return qid, 0, err } +func (fs *Authfs) Rstat(fid p9.FID) ([]byte, error) { + f, ok := fs.getFile(fid) + if !ok { + return nil, ErrFidNotExist + } + info, err := f.Stat() + if err != nil { + return nil, err + } + var buf bytes.Buffer + p9.Marshaldir(&buf, info) + return buf.Bytes(), nil +} + +func (fs *Authfs) Rclunk(fid p9.FID) error { + fs.mu.Lock() + defer fs.mu.Unlock() + + if _, exists := fs.files[fid]; !exists { + return ErrFidNotExist + } + delete(fs.files, fid) + return nil +} + func (fs *Authfs) Rflush(o p9.Tag) error { return nil } func (fs *Authfs) attach(fid p9.FID, f File) error { @@ -207,12 +223,9 @@ func (fs *Authfs) attach(fid p9.FID, f File) error { return nil } -func (fs *Authfs) getFile(fid p9.FID) (File, error) { +func (fs *Authfs) getFile(fid p9.FID) (File, bool) { fs.mu.Lock() defer fs.mu.Unlock() - f, exists := fs.files[fid] - if !exists { - return nil, ErrFidNotExist - } - return f, nil + f, ok := fs.files[fid] + return f, ok } diff --git a/back/cmd/authfs/err.go b/back/cmd/authfs/err.go index 7c2b192..a1e62f8 100644 --- a/back/cmd/authfs/err.go +++ b/back/cmd/authfs/err.go @@ -8,7 +8,7 @@ var ( ErrFidNotExist = errors.New("fid does not exist") ErrFileExist = errors.New("file already exists") ErrFileNotExist = errors.New("file does not exist") - ErrNewFidExist = errors.New("newfid already exists") + ErrNewfidExist = errors.New("newfid already exists") ErrPerm = errors.New("permission denied") ErrWalkNonDir = errors.New("cannot walk in non-directory") ) |