aboutsummaryrefslogtreecommitdiff
path: root/src/syscall/syscall_windows_test.go
AgeCommit message (Collapse)Author
2025-05-15os: set FILE_FLAG_BACKUP_SEMANTICS when opening without I/O accessqmuntal
FILE_FLAG_BACKUP_SEMANTICS is necessary to open directories on Windows, and to enable backup applications do extended operations on files if they hold the SE_BACKUP_NAME and SE_RESTORE_NAME privileges. os.OpenFile currently sets FILE_FLAG_BACKUP_SEMANTICS for all supported cases except when the file is opened with O_WRONLY | O_RDWR (that is, access mode 3). This access mode doesn't correspond to any of the standard POSIX access modes, but some OSes special case it to mean different things. For example, on Linux, O_WRONLY | O_RDWR means check for read and write permission on the file and return a file descriptor that can't be used for reading or writing. On Windows, os.OpenFile has historically mapped O_WRONLY | O_RDWR to a 0 access mode, which Windows internally interprets as FILE_READ_ATTRIBUTES. Additionally, it doesn't prepare the file for I/O, given that the read attributes permission doesn't allow reading or writing (not that this is similar to what happens on Linux). This makes opening the file around 50% faster, and one can still use the handle to stat it, so some projects have been using this behavior to open files without I/O access. This CL updates os.OpenFile so that directories can also be opened without I/O access. This effectively closes #23312, as all the remaining cases where we don't set FILE_FLAG_BACKUP_SEMANTICS imply opening with O_WRONLY or O_RDWR, and that's not allowed by Unix's open. Closes #23312. Change-Id: I77c4f55e1ca377789aef75bd8a9bce2b7499f91d Reviewed-on: https://go-review.googlesource.com/c/go/+/673035 Reviewed-by: Damien Neil <dneil@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
2025-04-30syscall: cache Errno.Error() on WindowsJake Bailey
Windows is unlike the other OSs and depends on a syscall for most errors. This can be costly; cache the returned string for later reuse. This helps test caching, since errors are written out as string to the test ID, which are often PathErrors wrapping Errnos. For now, only cache ERROR_FILE_NOT_FOUND and ERROR_PATH_NOT_FOUND. goos: windows goarch: amd64 pkg: syscall cpu: Intel(R) Core(TM) i9-10900K CPU @ 3.70GHz │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ ErrnoString-20 1788.00n ± 1% 11.08n ± 1% -99.38% (p=0.000 n=10) │ old.txt │ new.txt │ │ B/op │ B/op vs base │ ErrnoString-20 48.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) │ old.txt │ new.txt │ │ allocs/op │ allocs/op vs base │ ErrnoString-20 1.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) For #72992 Change-Id: I9a0910fa6538772ffc64ef7670b44059a2c7d18c Reviewed-on: https://go-review.googlesource.com/c/go/+/667495 Reviewed-by: Carlos Amedee <carlos@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Quim Muntal <quimmuntal@gmail.com> Reviewed-by: Junyang Shao <shaojunyang@google.com> Auto-Submit: Carlos Amedee <carlos@golang.org>
2024-11-20syscall: do not run TestSyscallAllocations in parallel with other testsRuss Cox
Fixes #70327. Change-Id: I27ee0d1fbae73fb5c22aa699f4e3110c67bc9ea2 Reviewed-on: https://go-review.googlesource.com/c/go/+/630136 Auto-Submit: Russ Cox <rsc@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Alan Donovan <adonovan@google.com>
2024-11-06syscall: mark SyscallN as noescapeqmuntal
syscall.SyscallN is implemented by runtime.syscall_syscalln, which makes sure that the variadic argument doesn't escape. There is no need to worry about the lifetime of the elements of the variadic argument, as the compiler will keep them live until the function returns. Fixes #70197. Cq-Include-Trybots: luci.golang.try:gotip-windows-amd64-longtest,gotip-windows-amd64-race Change-Id: I12991f0be12062eea68f2b103fa0a794c1b527eb Reviewed-on: https://go-review.googlesource.com/c/go/+/625297 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: David Chase <drchase@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
2024-10-18syscall: keep write access when O_TRUNC is used on Windowsqmuntal
CL 618836 introduces a regression where O_APPEND and O_TRUNC could not be used together on Windows. This CL fixes the issue by keeping the write access when O_TRUNC is used , which is required when overwriting data (as per the file access rights docs: https://learn.microsoft.com/en-us/windows/win32/fileio/file-access-rights-constants). Fixes #69902. Change-Id: I77ec60ca6929124dd4490bdad6c3280c4db3efcb Reviewed-on: https://go-review.googlesource.com/c/go/+/620575 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Damien Neil <dneil@google.com>
2024-10-10syscall: support more flags when opening directories on Windowsqmuntal
syscall.Open was artificially limiting the flags that were eligible to open directories on Windows. This change extend the cases where we pass FILE_FLAG_BACKUP_SEMANTICS to all flag combinations allowed by Unix. Change-Id: Ia7c083bcba070f92ea61c6d67487bdefd0d99546 Reviewed-on: https://go-review.googlesource.com/c/go/+/619295 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Damien Neil <dneil@google.com>
2024-10-10syscall: fix Open param namesqmuntal
syscall.Open param names are confusing, mainly because what should be named flag is named mode and what should be named mode is named perm. The name perm is used as synonym for mode in other places, so keep it as is. Rename mode to flag to match the real meaning of the parameter. Also, rename path to name for consistency with other usage of the same parameter. Change-Id: Ideed09839d80c0383584c2268afbb6cc09ffda8c Reviewed-on: https://go-review.googlesource.com/c/go/+/619276 Reviewed-by: Damien Neil <dneil@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
2024-10-10syscall,os: move flags validation from os.OpenFile to syscall.Openqmuntal
syscall.Open is the functions that maps Unix/Go flags into Windows concepts. Part of the flag validation logic was still implemented in os.OpenFile, move it to syscall.Open for consistency. A nice side effect is that we don't have to translate the file name twice in case of an access denied error. Change-Id: I32c647a9a2a066277c78f53bacb45fb3036f6353 Reviewed-on: https://go-review.googlesource.com/c/go/+/619275 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Damien Neil <dneil@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
2024-09-04all: use t.Chdir in testsKir Kolyshkin
Change-Id: I5bc514bedeb1155e6db52e37736fd6101774aea0 Reviewed-on: https://go-review.googlesource.com/c/go/+/529896 Auto-Submit: Ian Lance Taylor <iant@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Commit-Queue: Ian Lance Taylor <iant@golang.org>
2023-08-17syscall: don't check non-existent return code in GetStartupInfoTobias Klauser
Fixes #31316 Change-Id: I1ca5968836e7bcad91496e4ed3cf1a0caf1375f1 Reviewed-on: https://go-review.googlesource.com/c/go/+/520275 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
2023-06-14syscall: Fix Getwd on Windows to correctly handle long paths.Qi Xiao
Fixes #60051. Change-Id: Ia68ca0493912cb09d8c1d36a144bf0725842af1d Reviewed-on: https://go-review.googlesource.com/c/go/+/502415 Auto-Submit: Bryan Mills <bcmills@google.com> Run-TryBot: Quim Muntal <quimmuntal@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com>
2023-05-30syscall: fix ComputerName on Windowsqmuntal
GetComputerName expects n to be the size of the buffer, and on output contains the number of characters copied to the buffer. CL 493036 broke ComputerName by always setting n to 0. Change-Id: I3f4b30d2f9825d321a6d28ec82bdc7b6294e04e4 Reviewed-on: https://go-review.googlesource.com/c/go/+/499035 Run-TryBot: Quim Muntal <quimmuntal@gmail.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Bryan Mills <bcmills@google.com>
2023-05-04syscall: reduce memory allocated by UTF16FromStringFrediano Ziglio
The function allocated a buffer larger than needed. Fixes #59967. Signed-off-by: Frediano Ziglio <frediano.ziglio@nextdlp.com> Change-Id: I5f30a135acf5f27d6c2ef4bc4abef5144da4dc94 Reviewed-on: https://go-review.googlesource.com/c/go/+/492575 Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Carlos Amedee <carlos@golang.org> Run-TryBot: Bryan Mills <bcmills@google.com> Reviewed-by: Quim Muntal <quimmuntal@gmail.com> Reviewed-by: Bryan Mills <bcmills@google.com>
2022-11-14os,syscall: File.Stat to use file handle for directories on Windowsqmuntal
Updates syscall.Open to support opening directories via CreateFileW. CreateFileW handles are more versatile than FindFirstFile handles. They can be used in Win32 APIs like GetFileInformationByHandle and SetFilePointerEx, which are needed by some Go APIs. Fixes #52747 Fixes #36019 Change-Id: I26a00cef9844fb4abeeb18d2f9d854162a146651 Reviewed-on: https://go-review.googlesource.com/c/go/+/405275 Reviewed-by: Roland Shoemaker <roland@golang.org> Reviewed-by: Patrik Nyblom <pnyb@google.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Quim Muntal <quimmuntal@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-05-09os, syscall: don't consider stderr output as part of hostnameDmitri Shuralyov
A successful invocation of the hostname command prints the hostname to stdout and exits with code 0. No part of the hostname is printed to stderr, so don't consider it. This avoids false positive failures in environments where hostname prints some extraneous information (such as performance warnings) to stderr, and makes the test a bit more robust. Fixes #52781. Change-Id: I46aa6fbf95b6616bacf9c2b5e412b0851b230744 Reviewed-on: https://go-review.googlesource.com/c/go/+/405014 Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org> Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Jason Donenfeld <Jason@zx2c4.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2021-06-15syscall: disable c-shared test when no cgo, for windows/armJason A. Donenfeld
The windows/arm port does not yet support cgo, so disable a test that requires it. This fixes a regression from CL 327969, which added support for arm64, but errantly dropped the t.Skip for both arm and arm64, rather than just for arm64. With this commit, we make the test specific to cgo, rather than the architecture. Change-Id: Ibe1166c1965e007c7af899b07ded65f2a2633ddd Reviewed-on: https://go-review.googlesource.com/c/go/+/327970 Trust: Jason A. Donenfeld <Jason@zx2c4.com> Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
2021-06-15syscall: rewrite handle inheritance test to use C rather than PowershellJason A. Donenfeld
In CL 327210, we disabled this test on arm platforms, because the powershell shipped with those systems isn't native, which means it'd refuse to load native DLLs. This commit rewrites the test to simply not use Powershell, and instead compiles a trivial C program that tests for the same thing. Reverting CL 316269 makes this test fail, as desired, while applying it makes this test succeed. Fixes #46701 Change-Id: If39612c57bf74c63adf58e2c49b5cb739b461fe5 Reviewed-on: https://go-review.googlesource.com/c/go/+/327969 Trust: Jason A. Donenfeld <Jason@zx2c4.com> Trust: Alex Brainman <alex.brainman@gmail.com> Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
2021-06-11syscall: do not load native libraries on non-native powershell on armJason A. Donenfeld
The powershell that currently ships on ARM Windows isn't native, so it won't load native DLLs. So just skip the tests for now, and reenable it if this ever changes. Updates #46701. Change-Id: I2559fdf13cb65d3ecdc4c6f6df7dec1b490b9651 Reviewed-on: https://go-review.googlesource.com/c/go/+/327210 TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Trust: Jason A. Donenfeld <Jason@zx2c4.com> Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
2021-05-08syscall: do not change stdio handle inheritanceAlex Brainman
Before the CL 288297 all Go process handles had to be made non-inheritable - otherwise they would escape into the child process. But now this is not necessary. This CL stops changing inheritance flag of stdint, stdout and stderr handles. Fixes #44876 Change-Id: Ib8fcf8066c30282293d96c34486b01b4c04f7116 Reviewed-on: https://go-review.googlesource.com/c/go/+/316269 Trust: Alex Brainman <alex.brainman@gmail.com> Trust: Jason A. Donenfeld <Jason@zx2c4.com> Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>
2021-04-07syscall: replace os.MkdirTemp with T.TempDirianwoolf
Updates #45402 Change-Id: I573133d6b987e8ac23e3e2018652612af684c755 Reviewed-on: https://go-review.googlesource.com/c/go/+/307990 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com>
2021-03-11syscall: use runtime.KeepAlive for ProcThreadAttributeList argumentsJason A. Donenfeld
It turns out that if you write Go pointers to Go memory, the Go compiler must be involved so that it generates various calls to the GC in the process. Letting Windows write Go pointers to Go memory violated this. So, we replace that with just a boring call to runtime.KeepAlive. That's not a great API, but this is all internal code anyway. We fix it up more elegantly for external consumption in x/sys/windows with CL 300369. Fixes #44900. Change-Id: Id6599a793af9c4815f6c9387b00796923f32cb97 Reviewed-on: https://go-review.googlesource.com/c/go/+/300349 Trust: Jason A. Donenfeld <Jason@zx2c4.com> Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2021-03-04syscall: treat proc thread attribute lists as unsafe.PointersJason A. Donenfeld
It turns out that the proc thread update function doesn't actually allocate new memory for its arguments and instead just copies the pointer values into the preallocated memory. Since we were allocating that memory as []byte, the garbage collector didn't scan it for pointers to Go allocations and freed them. We _could_ fix this by requiring that all users of this use runtime.KeepAlive for everything they pass to the update function, but that seems harder than necessary. Instead, we can just do the allocation as []unsafe.Pointer, which means the GC can operate as intended and not free these from beneath our feet. In order to ensure this remains true, we also add a test for this. Fixes #44662. Change-Id: Ib392ba8ceacacec94b11379919c8179841cba29f Reviewed-on: https://go-review.googlesource.com/c/go/+/297389 Trust: Jason A. Donenfeld <Jason@zx2c4.com> Trust: Alex Brainman <alex.brainman@gmail.com> Trust: Bryan C. Mills <bcmills@google.com> Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-12-09all: update to use os.ReadFile, os.WriteFile, os.CreateTemp, os.MkdirTempRuss Cox
As part of #42026, these helpers from io/ioutil were moved to os. (ioutil.TempFile and TempDir became os.CreateTemp and MkdirTemp.) Update the Go tree to use the preferred names. As usual, code compiled with the Go 1.4 bootstrap toolchain and code vendored from other sources is excluded. ReadDir changes are in a separate CL, because they are not a simple search and replace. For #42026. Change-Id: If318df0216d57e95ea0c4093b89f65e5b0ababb3 Reviewed-on: https://go-review.googlesource.com/c/go/+/266365 Trust: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2018-06-11syscall: update TOKEN_ALL_ACCESS according to WinNT.hThanabodee Charoenpiriyakij
TOKEN_ALL_ACCESS was changed at some stage by Microsoft. Updates #25775 Change-Id: I3e18914207a0020b2ebfb99f4e57aa55f9de813b Reviewed-on: https://go-review.googlesource.com/117635 TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
2014-09-08build: move package sources from src/pkg to srcRuss Cox
Preparation was in CL 134570043. This CL contains only the effect of 'hg mv src/pkg/* src'. For more about the move, see golang.org/s/go14nopkg.