aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2016-11-09 17:02:33 -0800
committerRobert Griesemer <gri@golang.org>2016-11-10 01:34:03 +0000
commit73497c7656fa55ac33bac960ecee806b9b07ae5e (patch)
treed1997a16c312cb780663145f91b6a546d3bcd2ba
parentb188b4cc110261a004674df5a4e209cc4894d314 (diff)
downloadgo-73497c7656fa55ac33bac960ecee806b9b07ae5e.tar.gz
go-73497c7656fa55ac33bac960ecee806b9b07ae5e.zip
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 <bradfitz@golang.org>
-rw-r--r--src/cmd/gofmt/gofmt.go13
1 files 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
}