diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/internal/syscall/windows/at_windows.go | 11 | ||||
| -rw-r--r-- | src/os/root_windows.go | 6 | ||||
| -rw-r--r-- | src/syscall/types_windows.go | 8 |
3 files changed, 13 insertions, 12 deletions
diff --git a/src/internal/syscall/windows/at_windows.go b/src/internal/syscall/windows/at_windows.go index d48fce1c99..8b19a03e7e 100644 --- a/src/internal/syscall/windows/at_windows.go +++ b/src/internal/syscall/windows/at_windows.go @@ -13,16 +13,17 @@ import ( // Openat flags not supported by syscall.Open. // -// These are invented values. +// These are invented values, use values in the 33-63 bit range +// to avoid overlap with flags and attributes supported by [syscall.Open]. // // When adding a new flag here, add an unexported version to // the set of invented O_ values in syscall/types_windows.go // to avoid overlap. 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 + O_DIRECTORY = 0x100000000 // target must be a directory + O_NOFOLLOW_ANY = 0x200000000 // disallow symlinks anywhere in the path + O_OPEN_REPARSE = 0x400000000 // FILE_OPEN_REPARSE_POINT, used by Lstat + O_WRITE_ATTRS = 0x800000000 // FILE_WRITE_ATTRIBUTES, used by Chmod ) func Openat(dirfd syscall.Handle, name string, flag uint64, perm uint32) (_ syscall.Handle, e1 error) { diff --git a/src/os/root_windows.go b/src/os/root_windows.go index 523ee48d13..afc645d8f8 100644 --- a/src/os/root_windows.go +++ b/src/os/root_windows.go @@ -129,7 +129,7 @@ func openRootInRoot(r *Root, name string) (*Root, error) { // rootOpenFileNolog is Root.OpenFile. func rootOpenFileNolog(root *Root, name string, flag int, perm FileMode) (*File, error) { fd, err := doInRoot(root, name, nil, func(parent syscall.Handle, name string) (syscall.Handle, error) { - return openat(parent, name, flag, perm) + return openat(parent, name, uint64(flag), perm) }) if err != nil { return nil, &PathError{Op: "openat", Path: name, Err: err} @@ -138,8 +138,8 @@ func rootOpenFileNolog(root *Root, name string, flag int, perm FileMode) (*File, return newFile(fd, joinPath(root.Name(), name), "file", false), nil } -func openat(dirfd syscall.Handle, name string, flag int, perm FileMode) (syscall.Handle, error) { - h, err := windows.Openat(dirfd, name, uint64(flag)|syscall.O_CLOEXEC|windows.O_NOFOLLOW_ANY, syscallMode(perm)) +func openat(dirfd syscall.Handle, name string, flag uint64, perm FileMode) (syscall.Handle, error) { + h, err := windows.Openat(dirfd, name, flag|syscall.O_CLOEXEC|windows.O_NOFOLLOW_ANY, syscallMode(perm)) if err == syscall.ELOOP || err == syscall.ENOTDIR { if link, err := readReparseLinkAt(dirfd, name); err == nil { return syscall.InvalidHandle, errSymlink(link) diff --git a/src/syscall/types_windows.go b/src/syscall/types_windows.go index 92fa796a80..dd21fc8329 100644 --- a/src/syscall/types_windows.go +++ b/src/syscall/types_windows.go @@ -48,10 +48,10 @@ const ( O_SYNC = 0x01000 O_ASYNC = 0x02000 O_CLOEXEC = 0x80000 - o_DIRECTORY = 0x100000 // used by internal/syscall/windows - o_NOFOLLOW_ANY = 0x20000000 // used by internal/syscall/windows - o_OPEN_REPARSE = 0x40000000 // used by internal/syscall/windows - o_WRITE_ATTRS = 0x80000000 // used by internal/syscall/windows + o_DIRECTORY = 0x100000000 // used by internal/syscall/windows + o_NOFOLLOW_ANY = 0x200000000 // used by internal/syscall/windows + o_OPEN_REPARSE = 0x400000000 // used by internal/syscall/windows + o_WRITE_ATTRS = 0x800000000 // used by internal/syscall/windows ) const ( |
