@@ -34,7 +34,6 @@ type Handle struct {
3434 file * os.File
3535 handleID fuse.HandleID
3636 flags fuse.OpenFlags
37- size uint64
3837 blksize uint32
3938}
4039
@@ -50,21 +49,22 @@ func (h *Handle) isOpen() bool {
5049 return h .file != nil
5150}
5251
53- func (h * Handle ) doOpen (path string , flags fuse.OpenFlags ) error {
52+ func (h * Handle ) doOpen (path string , flags fuse.OpenFlags ) ( uint64 , error ) {
5453 if h .isOpen () {
55- return nil
54+ return 0 , nil
5655 }
5756 mode := int (flags & fuse .OpenAccessModeMask )
5857 perm := os .FileMode (flags ).Perm ()
5958 file , err := os .OpenFile (path , mode , perm )
6059 if err != nil {
61- return osErrorToFuseError (err )
60+ return 0 , osErrorToFuseError (err )
6261 }
63- if h .size , h .blksize , err = getSizeAndBlkSize (file ); err != nil {
64- return err
62+ blksize , err := getBlkSize (file )
63+ if err != nil {
64+ return 0 , err
6565 }
66- h .file , h .flags , h .handleID = file , flags , newHandleID ()
67- return nil
66+ h .file , h .flags , h .handleID , h . blksize = file , flags , newHandleID (), blksize
67+ return h . getFileSize ()
6868}
6969
7070func (h * Handle ) doCreate (path string , flags fuse.OpenFlags , mode os.FileMode ) error {
@@ -75,19 +75,20 @@ func (h *Handle) doCreate(path string, flags fuse.OpenFlags, mode os.FileMode) e
7575 if err != nil {
7676 return osErrorToFuseError (err )
7777 }
78- if _ , h .blksize , err = getSizeAndBlkSize (file ); err != nil {
78+ blksize , err := getBlkSize (file )
79+ if err != nil {
7980 return err
8081 }
81- h .file , h .flags , h .handleID = file , flags , newHandleID ()
82+ h .file , h .flags , h .handleID , h . blksize = file , flags , newHandleID (), blksize
8283 return nil
8384}
8485
85- func getSizeAndBlkSize ( f * os. File ) ( uint64 , uint32 , error ) {
86+ func ( h * Handle ) getFileSize () ( uint64 , error ) {
8687 var stat syscall.Stat_t
87- if err := syscall .Fstat (int (f .Fd ()), & stat ); err != nil {
88- return 0 , 0 , osErrorToFuseError (err )
88+ if err := syscall .Fstat (int (h . file .Fd ()), & stat ); err != nil {
89+ return 0 , osErrorToFuseError (err )
8990 }
90- return uint64 (stat .Size ), uint32 ( stat . Blksize ), nil
91+ return uint64 (stat .Size ), nil
9192}
9293
9394func (h * Handle ) doClose () error {
@@ -100,17 +101,20 @@ func (h *Handle) doClose() error {
100101 return nil
101102}
102103
103- func (h * Handle ) doSync () error {
104+ func (h * Handle ) doSync () ( uint64 , error ) {
104105 if ! h .isOpen () {
105- return nil
106+ return 0 , nil
106107 }
107108 if err := h .file .Sync (); err != nil {
108- return osErrorToFuseError (err )
109+ return 0 , osErrorToFuseError (err )
109110 }
111+ return h .getFileSize ()
112+ }
113+
114+ func getBlkSize (f * os.File ) (uint32 , error ) {
110115 var stat syscall.Stat_t
111- if err := syscall .Fstat (int (h . file .Fd ()), & stat ); err != nil {
112- return osErrorToFuseError (err )
116+ if err := syscall .Fstat (int (f .Fd ()), & stat ); err != nil {
117+ return 0 , osErrorToFuseError (err )
113118 }
114- h .size = uint64 (stat .Size )
115- return nil
119+ return uint32 (stat .Blksize ), nil
116120}
0 commit comments