Added FUSE support #55

Merged
Elara6331 merged 65 commits from yannickulrich/itd:fuse into master 2023-03-25 22:23:52 +00:00
Showing only changes of commit e2bd52b5a0 - Show all commits

11
fuse.go
View File

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