diff options
Diffstat (limited to 'back/cmd/authfs/authfs.go')
| -rw-r--r-- | back/cmd/authfs/authfs.go | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/back/cmd/authfs/authfs.go b/back/cmd/authfs/authfs.go index f3756af..da2637c 100644 --- a/back/cmd/authfs/authfs.go +++ b/back/cmd/authfs/authfs.go @@ -14,6 +14,7 @@ import ( type File interface { Qid() (p9.QID, error) Stat() (p9.Dir, error) + Remove() error Open(p9.Mode) error Read(p9.Offset, p9.Count) ([]byte, error) Write(p9.Offset, []byte) (p9.Count, error) @@ -200,15 +201,35 @@ func (fs *Authfs) Rstat(fid p9.FID) ([]byte, error) { return buf.Bytes(), nil } +func (fs *Authfs) Rwstat(fid p9.FID, b []byte) error { return ErrPerm } + func (fs *Authfs) Rclunk(fid p9.FID) error { - fs.mu.Lock() - defer fs.mu.Unlock() + _, err := fs.clunk(fid) + return err +} - if _, exists := fs.files[fid]; !exists { - return ErrFidNotExist +func (fs *Authfs) Rremove(fid p9.FID) error { + f, err := fs.clunk(fid) + if err != nil { + return err } - delete(fs.files, fid) - return nil + return f.Remove() +} + +func (fs *Authfs) Rread(fid p9.FID, off p9.Offset, n p9.Count) ([]byte, error) { + f, ok := fs.getFile(fid) + if !ok { + return nil, ErrFidNotExist + } + return f.Read(off, n) +} + +func (fs *Authfs) Rwrite(fid p9.FID, off p9.Offset, b []byte) (p9.Count, error) { + f, ok := fs.getFile(fid) + if !ok { + return nil, ErrFidNotExist + } + return f.Write(off, b) } func (fs *Authfs) Rflush(o p9.Tag) error { return nil } @@ -229,3 +250,14 @@ func (fs *Authfs) getFile(fid p9.FID) (File, bool) { f, ok := fs.files[fid] return f, ok } + +func (fs *Authfs) clunk(fid p9.FID) (File, error) { + fs.mu.Lock() + defer fs.mu.Unlock() + f, ok := fs.files[fid] + if !ok { + return nil, ErrFidNotExist + } + delete(fs.files, fid) + return f, nil +} |