From 73497c7656fa55ac33bac960ecee806b9b07ae5e Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 9 Nov 2016 17:02:33 -0800 Subject: cmd/gofmt: don't leave tmp file if -w failed Follow-up on https://golang.org/cl/33018. For #8984. Change-Id: I6655a5537a60d4ea3ee13029a56a75b150f8c8f8 Reviewed-on: https://go-review.googlesource.com/33020 Reviewed-by: Brad Fitzpatrick --- src/cmd/gofmt/gofmt.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/cmd/gofmt/gofmt.go b/src/cmd/gofmt/gofmt.go index 4cf91336a3..467af87459 100644 --- a/src/cmd/gofmt/gofmt.go +++ b/src/cmd/gofmt/gofmt.go @@ -243,15 +243,17 @@ func diff(b1, b2 []byte) (data []byte, err error) { // implemented. func writeFile(filename string, data []byte, perm os.FileMode) error { // open temp file - f, err := ioutil.TempFile(filepath.Dir(filename), "tmp") + f, err := ioutil.TempFile(filepath.Dir(filename), "gofmt-") if err != nil { return err } + tmpname := f.Name() err = f.Chmod(perm) if err != nil { + f.Close() + os.Remove(tmpname) return err } - tmpname := f.Name() // write data to temp file n, err := f.Write(data) @@ -261,9 +263,12 @@ func writeFile(filename string, data []byte, perm os.FileMode) error { if err1 := f.Close(); err == nil { err = err1 } + if err == nil { + err = os.Rename(tmpname, filename) + } if err != nil { - return err + os.Remove(tmpname) } - return os.Rename(tmpname, filename) + return err } -- cgit v1.2.3-54-g00ecf