78 lines
1.5 KiB
Go
78 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
)
|
|
import "github.com/hanwen/go-fuse/fuse"
|
|
import "github.com/hanwen/go-fuse/fuse/nodefs"
|
|
import "io/ioutil"
|
|
|
|
func NewJklfsFile() (nodefs.File, error) {
|
|
f, err := ioutil.TempFile("", "jklfile")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &jklfile{f}, nil
|
|
}
|
|
|
|
type jklfile struct {
|
|
*os.File
|
|
}
|
|
|
|
func (f *jklfile) InnerFile() nodefs.File {
|
|
return nil
|
|
}
|
|
|
|
func (f *jklfile) String() string {
|
|
return fmt.Sprintf("jklfile(%s)", f.Name())
|
|
}
|
|
|
|
func (f *jklfile) Write(data []byte, off int64) (uint32, fuse.Status) {
|
|
n, err := f.File.WriteAt(data, off)
|
|
if err != nil {
|
|
return uint32(0),fuse.EACCES
|
|
}
|
|
return uint32(n), fuse.OK
|
|
}
|
|
|
|
func (f *jklfile) Fsync(flag int) (code fuse.Status) {
|
|
return fuse.OK
|
|
}
|
|
|
|
func (f *jklfile) Truncate(size uint64) fuse.Status {
|
|
return fuse.EPERM
|
|
}
|
|
|
|
func (f *jklfile) Chmod(mode uint32) fuse.Status {
|
|
return fuse.EPERM
|
|
}
|
|
|
|
func (f *jklfile) Chown(uid uint32, gid uint32) fuse.Status {
|
|
return fuse.EPERM
|
|
}
|
|
|
|
func (f *jklfile) Allocate(off uint64, sz uint64, mode uint32) fuse.Status {
|
|
return fuse.EPERM
|
|
}
|
|
|
|
func (f *jklfile) Flush() fuse.Status {
|
|
return fuse.OK
|
|
}
|
|
|
|
func (f *jklfile) GetAttr(out *fuse.Attr) fuse.Status {
|
|
return fuse.OK
|
|
}
|
|
|
|
func (f *jklfile) Read(dest []byte, off int64) (fuse.ReadResult, fuse.Status) {
|
|
return nil, fuse.OK
|
|
}
|
|
func (f *jklfile) Release() {
|
|
|
|
}
|
|
func (f *jklfile) SetInode(i *nodefs.Inode) {}
|
|
|
|
func (f *jklfile) Utimens(atime *time.Time, mtime *time.Time) fuse.Status {
|
|
return fuse.EPERM
|
|
}
|