Commit cb96d98b authored by Alex Brainman's avatar Alex Brainman

os: another attempt to handle OpenFile flag parameter properly on Windows

Fixes #1791.

R=rsc, r, r, iant
CC=golang-dev
https://golang.org/cl/4551046
parent 2386808e
...@@ -918,7 +918,15 @@ func TestAppend(t *testing.T) { ...@@ -918,7 +918,15 @@ func TestAppend(t *testing.T) {
} }
s = writeFile(t, f, O_CREATE|O_APPEND|O_RDWR, "new&append") s = writeFile(t, f, O_CREATE|O_APPEND|O_RDWR, "new&append")
if s != "new&append" { if s != "new&append" {
t.Fatalf("writeFile: have %q want %q", s, "new&append") t.Fatalf("writeFile: after append have %q want %q", s, "new&append")
}
s = writeFile(t, f, O_CREATE|O_RDWR, "old")
if s != "old&append" {
t.Fatalf("writeFile: after create have %q want %q", s, "old&append")
}
s = writeFile(t, f, O_CREATE|O_TRUNC|O_RDWR, "new")
if s != "new" {
t.Fatalf("writeFile: after truncate have %q want %q", s, "new")
} }
} }
......
...@@ -230,16 +230,13 @@ func Open(path string, mode int, perm uint32) (fd int, errno int) { ...@@ -230,16 +230,13 @@ func Open(path string, mode int, perm uint32) (fd int, errno int) {
} }
var createmode uint32 var createmode uint32
switch { switch {
case mode&O_CREAT != 0: case mode&(O_CREAT|O_EXCL) == (O_CREAT | O_EXCL):
switch {
case mode&O_EXCL != 0:
createmode = CREATE_NEW createmode = CREATE_NEW
case mode&O_APPEND != 0: case mode&(O_CREAT|O_TRUNC) == (O_CREAT | O_TRUNC):
createmode = OPEN_ALWAYS
default:
createmode = CREATE_ALWAYS createmode = CREATE_ALWAYS
} case mode&O_CREAT == O_CREAT:
case mode&O_TRUNC != 0: createmode = OPEN_ALWAYS
case mode&O_TRUNC == O_TRUNC:
createmode = TRUNCATE_EXISTING createmode = TRUNCATE_EXISTING
default: default:
createmode = OPEN_EXISTING createmode = OPEN_EXISTING
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment