2022-12-08 13:05:19 -03:00

32 lines
859 B
Go

// 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
)