// 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) {
// 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}
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)
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 (