From de3aac609cde6b02c9411a002ff07adb473df15a Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 5 Apr 2011 11:12:02 -0400 Subject: [PATCH] gofix: don't rewrite O_APPEND opens R=r, rog CC=golang-dev https://golang.org/cl/4364041 --- misc/dashboard/builder/exec.go | 2 +- src/cmd/gofix/osopen.go | 12 +++++++++++- src/cmd/gofix/osopen_test.go | 2 ++ src/cmd/goinstall/main.go | 2 +- src/pkg/crypto/tls/generate_cert.go | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/misc/dashboard/builder/exec.go b/misc/dashboard/builder/exec.go index c122d4a07c..3c6fbdced4 100644 --- a/misc/dashboard/builder/exec.go +++ b/misc/dashboard/builder/exec.go @@ -49,7 +49,7 @@ func runLog(envv []string, logfile, dir string, argv ...string) (output string, b := new(bytes.Buffer) var w io.Writer = b if logfile != "" { - f, err := os.Create(logfile) + f, err := os.OpenFile(logfile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) if err != nil { return } diff --git a/src/cmd/gofix/osopen.go b/src/cmd/gofix/osopen.go index 4b9812477e..5d7f5cbde5 100644 --- a/src/cmd/gofix/osopen.go +++ b/src/cmd/gofix/osopen.go @@ -70,6 +70,7 @@ func osopen(f *ast.File) bool { func isCreateFlag(flag ast.Expr) bool { foundCreate := false foundTrunc := false + foundAppend := false // OR'ing of flags: is O_CREATE on? + or | would be fine; we just look for os.O_CREATE // and don't worry about the actual opeator. p := flag.Pos() @@ -85,12 +86,21 @@ func isCreateFlag(flag ast.Expr) bool { if isPkgDot(lhs, "os", "O_TRUNC") { foundTrunc = true } + if isPkgDot(lhs, "os", "O_APPEND") { + foundAppend = true + } if !isBinary { break } flag = expr.X } - if foundCreate && !foundTrunc { + if !foundCreate { + return false + } + if foundAppend { + return false + } + if !foundTrunc { warn(p, "rewrote os.Open with O_CREATE but not O_TRUNC to os.Create") } return foundCreate diff --git a/src/cmd/gofix/osopen_test.go b/src/cmd/gofix/osopen_test.go index b662b62db5..b0a4f63c69 100644 --- a/src/cmd/gofix/osopen_test.go +++ b/src/cmd/gofix/osopen_test.go @@ -27,6 +27,7 @@ func f() { os.Open(a, os.O_CREATE, 0666) os.Open(a, os.O_CREATE|os.O_TRUNC, 0664) os.Open(a, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) + os.Open(a, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) _ = os.O_CREAT } `, @@ -46,6 +47,7 @@ func f() { os.Create(a) os.Create(a) os.Create(a) + os.OpenFile(a, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) _ = os.O_CREATE } `, diff --git a/src/cmd/goinstall/main.go b/src/cmd/goinstall/main.go index 6d5d34884c..8fec8e312a 100644 --- a/src/cmd/goinstall/main.go +++ b/src/cmd/goinstall/main.go @@ -120,7 +120,7 @@ func logPackage(pkg string) { if installedPkgs[pkg] { return } - fout, err := os.Create(logfile) + fout, err := os.OpenFile(logfile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) if err != nil { fmt.Fprintf(os.Stderr, "%s: %s\n", argv0, err) return diff --git a/src/pkg/crypto/tls/generate_cert.go b/src/pkg/crypto/tls/generate_cert.go index 5c783fd296..5b8c700e5f 100644 --- a/src/pkg/crypto/tls/generate_cert.go +++ b/src/pkg/crypto/tls/generate_cert.go @@ -59,7 +59,7 @@ func main() { certOut.Close() log.Print("written cert.pem\n") - keyOut, err := os.OpenFile("key.pem", os.O_WRONLY|os.O_CREAT, 0600) + keyOut, err := os.OpenFile("key.pem", os.O_WRONLY|os.O_CREAT|os.O_TRUNC, 0600) if err != nil { log.Print("failed to open key.pem for writing:", err) return -- 2.48.1