package misc import ( "syscall" "unsafe" ) const SYS_OPENAT2 = 437 type Open_how_t struct { Flags uint64 Mode uint64 Resolve uint64 } const ( RESOLVE_BENEATH = 0x8 RESOLVE_IN_ROOT = 0x10 RESOLVE_NO_MAGICLINKS = 0x2 RESOLVE_NO_SYMLINKS = 0x4 RESOLVE_NO_XDEV = 0x1 ) // See openat2(2) on Linux func Openat2(dirfd int, path string, open_how *Open_how_t) (fd int, err error) { path_ptr, err := String_to_byte_ptr(path) if err != nil { return } _fd, _, errno := syscall.Syscall6(SYS_OPENAT2, uintptr(dirfd), uintptr(unsafe.Pointer(path_ptr)), uintptr(unsafe.Pointer(open_how)), uintptr(unsafe.Sizeof(Open_how_t{})), 0, 0) fd = int(_fd) if errno != 0 { err = errno } return }