]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: support O_SYNC flag for os.OpenFile on windows
authorJes Cok <xigua67damn@gmail.com>
Wed, 15 Nov 2023 13:08:23 +0000 (13:08 +0000)
committerQuim Muntal <quimmuntal@gmail.com>
Mon, 20 Nov 2023 16:08:51 +0000 (16:08 +0000)
os.OpenFile on windows did not use the O_SYNC flag. This meant
that even if the user set O_SYNC, os.OpenFile would ignore it.

This change adds a new flag FILE_FLAG_WRITE_THROUGH, which is
the equivalent of O_SYNC flag on Linux and is documented in
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea

Fixes #35358

Change-Id: Ib338caed5bb2f215723bfe30a2551a83998d92c9
GitHub-Last-Rev: 82c6275cb49602d7903b2bff7d60b7c772a5d91a
GitHub-Pull-Request: golang/go#64027
Reviewed-on: https://go-review.googlesource.com/c/go/+/541015
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com>
Run-TryBot: Jes Cok <xigua67damn@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Quim Muntal <quimmuntal@gmail.com>
src/syscall/syscall_windows.go

index 33876c7fe035165b24a8eea316eb4d9bc69d663c..d13acc5c441b1af5f13a0356864c11805ac19d93 100644 (file)
@@ -409,6 +409,10 @@ func Open(path string, mode int, perm uint32) (fd Handle, err error) {
                // Necessary for opening directory handles.
                attrs |= FILE_FLAG_BACKUP_SEMANTICS
        }
+       if mode&O_SYNC != 0 {
+               const _FILE_FLAG_WRITE_THROUGH = 0x80000000
+               attrs |= _FILE_FLAG_WRITE_THROUGH
+       }
        return CreateFile(pathp, access, sharemode, sa, createmode, attrs, 0)
 }