// Copyright (c) 2021 Gitpod GmbH. All rights reserved. // Licensed under the GNU Affero General Public License (AGPL). // See License.AGPL.txt in the project root for license information. package iws import ( "unsafe" "golang.org/x/sys/unix" ) func syscallOpenTree(dfd int, path string, flags uintptr) (fd uintptr, err error) { p1, err := unix.BytePtrFromString(path) if err != nil { return 0, err } fd, _, errno := unix.Syscall(unix.SYS_OPEN_TREE, uintptr(dfd), uintptr(unsafe.Pointer(p1)), flags) if errno != 0 { return 0, errno } return fd, nil } const ( // FlagOpenTreeClone: https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/mount.h#L62 flagOpenTreeClone = 1 // FlagAtRecursive: Apply to the entire subtree: https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/fcntl.h#L112 flagAtRecursive = 0x8000 )