Implemented Read for watcher

This commit is contained in:
Yannick Ulrich 2023-02-26 19:06:11 +00:00
parent 2c899b4660
commit e2bd52b5a0

11
fuse.go
View File

@ -248,6 +248,7 @@ func (fh *bytesFileReadHandle) Read(ctx context.Context, dest []byte, off int64)
type sensorFileReadHandle struct {
ch <-chan uint8
cancel context.CancelFunc
}
var _ = (fs.FileReader)((*sensorFileReadHandle)(nil))
func (fh *sensorFileReadHandle) Read(ctx context.Context, dest []byte, off int64) (fuse.ReadResult, syscall.Errno) {
@ -256,6 +257,12 @@ func (fh *sensorFileReadHandle) Read(ctx context.Context, dest []byte, off int64
return fuse.ReadResultData(content), 0
}
var _ = (fs.FileFlusher)((*sensorFileReadHandle)(nil))
func (fh *sensorFileReadHandle) Flush(ctx context.Context) (errno syscall.Errno) {
fh.cancel()
return 0
}
type bytesFileWriteHandle struct {
content []byte
@ -395,13 +402,15 @@ func (f *ITNode) Open(ctx context.Context, openFlags uint32) (fh fs.FileHandle,
for _, value := range properties {
if value.Ino == f.Ino {
ans, err := value.gen(ctx)
sub_ctx, cancel := context.WithCancel(ctx)
ans, err := value.gen(sub_ctx)
if err != nil {
return nil, 0, syscall.EROFS
}
fh = &sensorFileReadHandle{
ch: ans,
cancel : cancel,
}
return fh, fuse.FOPEN_DIRECT_IO, 0
}