summaryrefslogtreecommitdiff
path: root/cmd/btrfs-mount/subvol_fuse.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-07-06 01:48:48 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-07-08 00:15:58 -0600
commit5647659f27f8aa18bc10ca4742f8856162325d5c (patch)
tree249fd2d4ea5e0e8bf6dab24d305a4daa5bf0cc6e /cmd/btrfs-mount/subvol_fuse.go
parentb392ad64a8fd04d20b35ad21d2d4ea3ff2778e3f (diff)
file reading!
Diffstat (limited to 'cmd/btrfs-mount/subvol_fuse.go')
-rw-r--r--cmd/btrfs-mount/subvol_fuse.go18
1 files changed, 16 insertions, 2 deletions
diff --git a/cmd/btrfs-mount/subvol_fuse.go b/cmd/btrfs-mount/subvol_fuse.go
index 7500e0b..6f3f267 100644
--- a/cmd/btrfs-mount/subvol_fuse.go
+++ b/cmd/btrfs-mount/subvol_fuse.go
@@ -197,11 +197,25 @@ func (sv *Subvolume) OpenFile(_ context.Context, op *fuseops.OpenFileOp) error {
return nil
}
func (sv *Subvolume) ReadFile(_ context.Context, op *fuseops.ReadFileOp) error {
- _, ok := sv.fileHandles.Load(op.Handle)
+ state, ok := sv.fileHandles.Load(op.Handle)
if !ok {
return syscall.EBADF
}
- return syscall.ENOSYS
+
+ size := op.Size
+ var dat []byte
+ if op.Dst != nil {
+ size = util.Min(int64(len(op.Dst)), size)
+ dat = op.Dst
+ } else {
+ dat = make([]byte, op.Size)
+ op.Data = [][]byte{dat}
+ }
+
+ var err error
+ op.BytesRead, err = state.File.ReadAt(dat, op.Offset)
+
+ return err
}
func (sv *Subvolume) ReleaseFileHandle(_ context.Context, op *fuseops.ReleaseFileHandleOp) error {
_, ok := sv.fileHandles.LoadAndDelete(op.Handle)