From: Alex Brainman Date: Fri, 22 Apr 2011 05:31:25 +0000 (+1000) Subject: os: Open with O_APPEND|O_CREATE to append to the end of file on Windows X-Git-Tag: weekly.2011-04-27~69 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=59c18b0b366f4d65d0c6c33e87ad056d291fea4d;p=gostls13.git os: Open with O_APPEND|O_CREATE to append to the end of file on Windows Credit for the fix goes to Hector, test by PeterGo. Fixes #1655. R=golang-dev, rsc1, peterGo CC=golang-dev, hector https://golang.org/cl/4436051 --- diff --git a/src/pkg/os/os_test.go b/src/pkg/os/os_test.go index 551b865085..4c9feab1ce 100644 --- a/src/pkg/os/os_test.go +++ b/src/pkg/os/os_test.go @@ -886,6 +886,18 @@ func TestAppend(t *testing.T) { if s != "new|append" { t.Fatalf("writeFile: have %q want %q", s, "new|append") } + s = writeFile(t, f, O_CREATE|O_APPEND|O_RDWR, "|append") + if s != "new|append|append" { + t.Fatalf("writeFile: have %q want %q", s, "new|append|append") + } + err := Remove(f) + if err != nil { + t.Fatalf("Remove: %v", err) + } + s = writeFile(t, f, O_CREATE|O_APPEND|O_RDWR, "new&append") + if s != "new&append" { + t.Fatalf("writeFile: have %q want %q", s, "new&append") + } } func TestStatDirWithTrailingSlash(t *testing.T) { diff --git a/src/pkg/syscall/syscall_windows.go b/src/pkg/syscall/syscall_windows.go index 4ac2154c85..e01310deff 100644 --- a/src/pkg/syscall/syscall_windows.go +++ b/src/pkg/syscall/syscall_windows.go @@ -220,9 +220,12 @@ func Open(path string, mode int, perm uint32) (fd int, errno int) { var createmode uint32 switch { case mode&O_CREAT != 0: - if mode&O_EXCL != 0 { + switch { + case mode&O_EXCL != 0: createmode = CREATE_NEW - } else { + case mode&O_APPEND != 0: + createmode = OPEN_ALWAYS + default: createmode = CREATE_ALWAYS } case mode&O_TRUNC != 0: