blob: 2b6363423baf0ca83257e4acb4c998965366cda8 (
plain) (
tree)
|
|
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
}
|