mirror of
https://github.com/systemd/systemd.git
synced 2026-07-26 03:06:21 +00:00
basic: Add open_tree_attr() syscall wrapper
This commit is contained in:
@@ -607,6 +607,7 @@ foreach ident : [
|
||||
['pivot_root', '''#include <sys/syscall.h>'''], # no known header declares pivot_root
|
||||
['setxattrat', '''#include <sys/xattr.h>'''], # no known header declares setxattrat
|
||||
['removexattrat', '''#include <sys/xattr.h>'''], # no known header declares removexattrat
|
||||
['open_tree_attr', '''#include <sys/mount.h>'''], # no known header declares open_tree_attr
|
||||
]
|
||||
|
||||
have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
|
||||
|
||||
@@ -120,3 +120,13 @@ static inline int missing_mount_setattr(int dfd, const char *path, unsigned flag
|
||||
}
|
||||
# define mount_setattr missing_mount_setattr
|
||||
#endif
|
||||
|
||||
#if HAVE_OPEN_TREE_ATTR
|
||||
extern int open_tree_attr(int __dfd, const char *__filename, unsigned int __flags, struct mount_attr *__uattr, size_t __usize) __THROW;
|
||||
#else
|
||||
static inline int missing_open_tree_attr(int dfd, const char *filename, unsigned int flags, struct mount_attr *attr, size_t size) {
|
||||
return syscall(__NR_open_tree_attr, dfd, filename, flags, attr, size);
|
||||
}
|
||||
|
||||
# define open_tree_attr missing_open_tree_attr
|
||||
#endif
|
||||
|
||||
@@ -517,3 +517,71 @@ _Static_assert(__NR_setxattrat == systemd_NR_setxattrat, "");
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef __IGNORE_open_tree_attr
|
||||
# if defined(__aarch64__)
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# elif defined(__alpha__)
|
||||
# define systemd_NR_open_tree_attr 577
|
||||
# elif defined(__arc__) || defined(__tilegx__)
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# elif defined(__arm__)
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# elif defined(__i386__)
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# elif defined(__ia64__)
|
||||
# define systemd_NR_open_tree_attr -1
|
||||
# elif defined(__loongarch_lp64)
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# elif defined(__m68k__)
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# elif defined(_MIPS_SIM)
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_NR_open_tree_attr 4467
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_open_tree_attr 6467
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_open_tree_attr 5467
|
||||
# else
|
||||
# error "Unknown MIPS ABI"
|
||||
# endif
|
||||
# elif defined(__hppa__)
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# elif defined(__powerpc__)
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# elif defined(__riscv)
|
||||
# if __riscv_xlen == 32
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# elif __riscv_xlen == 64
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# else
|
||||
# error "Unknown RISC-V ABI"
|
||||
# endif
|
||||
# elif defined(__s390__)
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# elif defined(__sparc__)
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# elif defined(__x86_64__)
|
||||
# if defined(__ILP32__)
|
||||
# define systemd_NR_open_tree_attr (467 | /* __X32_SYSCALL_BIT */ 0x40000000)
|
||||
# else
|
||||
# define systemd_NR_open_tree_attr 467
|
||||
# endif
|
||||
# elif !defined(missing_arch_template)
|
||||
# warning "open_tree_attr() syscall number is unknown for your architecture"
|
||||
# endif
|
||||
|
||||
/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
|
||||
# if defined __NR_open_tree_attr && __NR_open_tree_attr >= 0
|
||||
# if defined systemd_NR_open_tree_attr
|
||||
_Static_assert(__NR_open_tree_attr == systemd_NR_open_tree_attr, "");
|
||||
# endif
|
||||
# else
|
||||
# if defined __NR_open_tree_attr
|
||||
# undef __NR_open_tree_attr
|
||||
# endif
|
||||
# if defined systemd_NR_open_tree_attr && systemd_NR_open_tree_attr >= 0
|
||||
# define __NR_open_tree_attr systemd_NR_open_tree_attr
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -9,6 +9,7 @@ SYSCALLS = [
|
||||
'close_range', # defined in glibc header since glibc-2.33
|
||||
'fchmodat2', # defined in glibc header since glibc-2.39
|
||||
'mount_setattr', # defined in glibc header since glibc-2.34
|
||||
'open_tree_attr',
|
||||
'openat2', # defined in glibc header since glibc-2.32
|
||||
'quotactl_fd', # defined in glibc header since glibc-2.35
|
||||
'removexattrat',
|
||||
|
||||
Reference in New Issue
Block a user