]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gofmt: don't leave tmp file if -w failed
authorRobert Griesemer <gri@golang.org>
Thu, 10 Nov 2016 01:02:33 +0000 (17:02 -0800)
committerRobert Griesemer <gri@golang.org>
Thu, 10 Nov 2016 01:34:03 +0000 (01:34 +0000)
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>
src/cmd/gofmt/gofmt.go

index 4cf91336a3beea018e95104ac40713ef266f84fe..467af87459f51264437f3aae9269057cc8ab86e2 100644 (file)
@@ -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
 }