From f57e92b9a5666052e887e87ce0e4bf78a87f1bdd Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Mon, 26 Feb 2018 19:37:58 +0000 Subject: [PATCH] vfs: fix creation of files when truncating #2083 As spotted by @B4dM4n --- vfs/read_write.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/vfs/read_write.go b/vfs/read_write.go index ade4375e1..69913ae3d 100644 --- a/vfs/read_write.go +++ b/vfs/read_write.go @@ -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