Some limited support for writing files
This commit is contained in:
parent
da03558a45
commit
c156800411
@ -26,6 +26,7 @@ import (
|
||||
"bazil.org/fuse/fs"
|
||||
"io/ioutil"
|
||||
"path/filepath"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
type database struct {
|
||||
@ -119,6 +120,5 @@ func (this *database) Root() (fs.Node, error) {
|
||||
}
|
||||
|
||||
func (this *database) AllocInode() uint64 {
|
||||
this.inodeCnt++
|
||||
return this.inodeCnt
|
||||
return atomic.AddUint64(&this.inodeCnt, 1)
|
||||
}
|
||||
|
36
file.go
36
file.go
@ -26,6 +26,7 @@ import (
|
||||
"bazil.org/fuse"
|
||||
"golang.org/x/net/context"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
)
|
||||
|
||||
type versionedFile struct {
|
||||
@ -46,6 +47,41 @@ func (this versionedFile) Attr(attr *fuse.Attr) {
|
||||
attr.Inode = this.inode
|
||||
}
|
||||
|
||||
func (this versionedFile) Write(ctx context.Context, req *fuse.WriteRequest, resp *fuse.WriteResponse) error {
|
||||
file, err := os.OpenFile(this.node.rebasedPath(), os.O_WRONLY, 0666)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
size, err := file.WriteAt(req.Data, req.Offset)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
resp.Size = size
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this versionedFile) Setattr(ctx context.Context, req *fuse.SetattrRequest, resp *fuse.SetattrResponse) error {
|
||||
info, err := os.Stat(this.node.rebasedPath())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
this.node.info = info
|
||||
this.Attr(&resp.Attr)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this versionedFile) Fsync(ctx context.Context, req *fuse.FsyncRequest) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// func (this versionedFile) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error {
|
||||
// return nil
|
||||
// }
|
||||
|
||||
func (this versionedFile) ReadAll(ctx context.Context) ([]byte, error) {
|
||||
bytes, err := ioutil.ReadFile(this.node.rebasedPath())
|
||||
if err != nil {
|
||||
|
Loading…
Reference in New Issue
Block a user