summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2026-03-14 18:54:59 -0400
committerSam Anthony <sam@samanthony.xyz>2026-03-14 18:54:59 -0400
commitcab80e76783c416960b06d98058eeba8d4c254fb (patch)
tree7c7485a98c645c3fa637ec54772ede20610ef296
parent4e7f559874df9fe8dc17ceec89fa5087d011a363 (diff)
downloadbuth-cab80e76783c416960b06d98058eeba8d4c254fb.zip
authfs: implement remaining 9p methods
-rw-r--r--back/cmd/authfs/authfs.go44
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
+}