Added FUSE support #55
33
fuse.go
33
fuse.go
@ -10,6 +10,8 @@ import (
|
|||||||
"github.com/hanwen/go-fuse/v2/fs"
|
"github.com/hanwen/go-fuse/v2/fs"
|
||||||
"github.com/hanwen/go-fuse/v2/fuse"
|
"github.com/hanwen/go-fuse/v2/fuse"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"io"
|
||||||
|
"bytes"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Device struct {
|
type Device struct {
|
||||||
@ -266,8 +268,17 @@ func (fh *bytesFileWriteHandle) Flush(ctx context.Context) (errno syscall.Errno)
|
|||||||
log.Error("Flush failed: create").Str("path", fh.path).Err(err).Send()
|
log.Error("Flush failed: create").Str("path", fh.path).Err(err).Send()
|
||||||
return syscall.EROFS
|
return syscall.EROFS
|
||||||
}
|
}
|
||||||
nread, err := fp.Write(fh.content)
|
|
||||||
if err != nil || nread != len(fh.content) {
|
go func() {
|
||||||
|
// For every progress event
|
||||||
|
for sent := range fp.Progress() {
|
||||||
|
log.Info("Progress").Int("bytes", int(sent)).Int("of", len(fh.content)).Send();
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
r := bytes.NewReader(fh.content)
|
||||||
|
nread, err := io.Copy(fp, r)
|
||||||
|
if err != nil {
|
||||||
log.Error("Flush failed: write").Str("path", fh.path).Err(err).Send()
|
log.Error("Flush failed: write").Str("path", fh.path).Err(err).Send()
|
||||||
fp.Close()
|
fp.Close()
|
||||||
return syscall.EROFS
|
return syscall.EROFS
|
||||||
@ -337,16 +348,24 @@ func (f *ITNode) Open(ctx context.Context, openFlags uint32) (fh fs.FileHandle,
|
|||||||
|
|
||||||
defer fp.Close()
|
defer fp.Close()
|
||||||
|
|
||||||
buf := make([]byte, f.self.size);
|
b := &bytes.Buffer{}
|
||||||
nread, err := fp.Read(buf)
|
|
||||||
if err != nil || nread != int(f.self.size) {
|
go func() {
|
||||||
log.Error("Reading file failed").Str("path", f.path).Err(err).Send();
|
// For every progress event
|
||||||
|
for sent := range fp.Progress() {
|
||||||
|
log.Info("Progress").Int("bytes", int(sent)).Int("of", int(f.self.size)).Send();
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
_, err = io.Copy(b, fp)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Read failed").Str("path", f.path).Err(err).Send()
|
||||||
fp.Close()
|
fp.Close()
|
||||||
return nil, 0, syscall.EROFS
|
return nil, 0, syscall.EROFS
|
||||||
}
|
}
|
||||||
|
|
||||||
fh = &bytesFileReadHandle{
|
fh = &bytesFileReadHandle{
|
||||||
content: buf,
|
content: b.Bytes(),
|
||||||
}
|
}
|
||||||
return fh, fuse.FOPEN_DIRECT_IO, 0
|
return fh, fuse.FOPEN_DIRECT_IO, 0
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user