diff options
| author | Damien Neil <dneil@google.com> | 2025-01-30 15:53:06 -0800 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2025-02-10 15:33:35 -0800 |
| commit | 371e83cd7b309988bbe6b1bc7d0bd72aff52aa08 (patch) | |
| tree | 224760e8930b26caa4abdd7db3a233eb404e6fc3 /src/internal/syscall/windows | |
| parent | 2e8973aeea66f01d9770e1d307330a2d188b27cc (diff) | |
| download | go-371e83cd7b309988bbe6b1bc7d0bd72aff52aa08.tar.xz | |
os: add Root.Chmod
For #67002
Change-Id: Id6c3a2096bd10f5f5f6921a0441dc6d9e6cdeb3b
Reviewed-on: https://go-review.googlesource.com/c/go/+/645718
Commit-Queue: Damien Neil <dneil@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Damien Neil <dneil@google.com>
Diffstat (limited to 'src/internal/syscall/windows')
| -rw-r--r-- | src/internal/syscall/windows/at_windows.go | 8 | ||||
| -rw-r--r-- | src/internal/syscall/windows/at_windows_test.go | 2 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/internal/syscall/windows/at_windows.go b/src/internal/syscall/windows/at_windows.go index 18429773c0..19bcc0dbac 100644 --- a/src/internal/syscall/windows/at_windows.go +++ b/src/internal/syscall/windows/at_windows.go @@ -20,9 +20,10 @@ const ( O_DIRECTORY = 0x100000 // target must be a directory O_NOFOLLOW_ANY = 0x20000000 // disallow symlinks anywhere in the path O_OPEN_REPARSE = 0x40000000 // FILE_OPEN_REPARSE_POINT, used by Lstat + O_WRITE_ATTRS = 0x80000000 // FILE_WRITE_ATTRIBUTES, used by Chmod ) -func Openat(dirfd syscall.Handle, name string, flag int, perm uint32) (_ syscall.Handle, e1 error) { +func Openat(dirfd syscall.Handle, name string, flag uint64, perm uint32) (_ syscall.Handle, e1 error) { if len(name) == 0 { return syscall.InvalidHandle, syscall.ERROR_FILE_NOT_FOUND } @@ -61,6 +62,9 @@ func Openat(dirfd syscall.Handle, name string, flag int, perm uint32) (_ syscall if flag&syscall.O_SYNC != 0 { options |= FILE_WRITE_THROUGH } + if flag&O_WRITE_ATTRS != 0 { + access |= FILE_WRITE_ATTRIBUTES + } // Allow File.Stat. access |= STANDARD_RIGHTS_READ | FILE_READ_ATTRIBUTES | FILE_READ_EA @@ -129,7 +133,7 @@ func Openat(dirfd syscall.Handle, name string, flag int, perm uint32) (_ syscall } // ntCreateFileError maps error returns from NTCreateFile to user-visible errors. -func ntCreateFileError(err error, flag int) error { +func ntCreateFileError(err error, flag uint64) error { s, ok := err.(NTStatus) if !ok { // Shouldn't really be possible, NtCreateFile always returns NTStatus. diff --git a/src/internal/syscall/windows/at_windows_test.go b/src/internal/syscall/windows/at_windows_test.go index 7da9ecf07a..daeb4fcde3 100644 --- a/src/internal/syscall/windows/at_windows_test.go +++ b/src/internal/syscall/windows/at_windows_test.go @@ -46,7 +46,7 @@ func TestOpen(t *testing.T) { continue } base := filepath.Base(tt.path) - h, err := windows.Openat(dirfd, base, tt.flag, 0o660) + h, err := windows.Openat(dirfd, base, uint64(tt.flag), 0o660) syscall.CloseHandle(dirfd) if err == nil { syscall.CloseHandle(h) |
