vfs: fix creation of files when truncating #2083

As spotted by @B4dM4n
This commit is contained in:
Nick Craig-Wood 2018-02-26 19:37:58 +00:00
parent baf9ee5cf7
commit f57e92b9a5

View File

@ -3,6 +3,7 @@ package vfs
import (
"fmt"
"io"
"io/ioutil"
"os"
"runtime"
"sync"
@ -159,9 +160,12 @@ func (fh *RWFileHandle) openPending(truncate bool) (err error) {
// Set the size to 0 since we are truncating and flag we need to write it back
fh.file.setSize(0)
fh.writeCalled = true
if fh.flags&os.O_CREATE != 0 && fh.file.exists() {
// create and empty file if it exists on the source
cacheFileOpenFlags |= os.O_CREATE
if fh.flags&os.O_CREATE == 0 && fh.file.exists() {
// create an empty file if it exists on the source
err = ioutil.WriteFile(fh.osPath, []byte{}, 0600)
if err != nil {
return errors.Wrap(err, "cache open failed to create zero length file")
}
}
// Windows doesn't seem to deal well with O_TRUNC and
// certain access modes so so truncate the file if it