]> Cypherpunks repositories - gostls13.git/commitdiff
os: Open with O_APPEND|O_CREATE to append to the end of file on Windows
authorAlex Brainman <alex.brainman@gmail.com>
Fri, 22 Apr 2011 05:31:25 +0000 (15:31 +1000)
committerAlex Brainman <alex.brainman@gmail.com>
Fri, 22 Apr 2011 05:31:25 +0000 (15:31 +1000)
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

src/pkg/os/os_test.go
src/pkg/syscall/syscall_windows.go

index 551b86508570bb470c6985d02be2177234f01301..4c9feab1ceb08ae303a84f0e17e60c4b27f07864 100644 (file)
@@ -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) {
index 4ac2154c85160a7fbd0848a56a70f3da8a0ee11f..e01310deff03c8a297f05f461d5a488f431c7fef 100644 (file)
@@ -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: