mirror of
https://github.com/flatpak/flatpak.git
synced 2026-05-16 20:56:52 -04:00
missing: Add syscall and structs for statx()
They are taken from an older revision of systemd with minimal changes.
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
|
||||
#include "libglnx-config.h"
|
||||
#include <glib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#if !HAVE_DECL_RENAMEAT2
|
||||
# ifndef __NR_renameat2
|
||||
@@ -236,3 +237,150 @@ inline_close_range (unsigned int low,
|
||||
#define close_range(low, high, flags) inline_close_range(low, high, flags)
|
||||
#define HAVE_CLOSE_RANGE
|
||||
#endif
|
||||
|
||||
#ifndef __IGNORE_statx
|
||||
# if defined(__aarch64__)
|
||||
# define systemd_NR_statx 291
|
||||
# elif defined(__alpha__)
|
||||
# define systemd_NR_statx 522
|
||||
# elif defined(__arc__) || defined(__tilegx__)
|
||||
# define systemd_NR_statx 291
|
||||
# elif defined(__arm__)
|
||||
# define systemd_NR_statx 397
|
||||
# elif defined(__i386__)
|
||||
# define systemd_NR_statx 383
|
||||
# elif defined(__ia64__)
|
||||
# define systemd_NR_statx 1350
|
||||
# elif defined(__loongarch_lp64)
|
||||
# define systemd_NR_statx 291
|
||||
# elif defined(__m68k__)
|
||||
# define systemd_NR_statx 379
|
||||
# elif defined(_MIPS_SIM)
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_NR_statx 4366
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_statx 6330
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_statx 5326
|
||||
# else
|
||||
# error "Unknown MIPS ABI"
|
||||
# endif
|
||||
# elif defined(__hppa__)
|
||||
# define systemd_NR_statx 349
|
||||
# elif defined(__powerpc__)
|
||||
# define systemd_NR_statx 383
|
||||
# elif defined(__riscv)
|
||||
# if __riscv_xlen == 32
|
||||
# define systemd_NR_statx 291
|
||||
# elif __riscv_xlen == 64
|
||||
# define systemd_NR_statx 291
|
||||
# else
|
||||
# error "Unknown RISC-V ABI"
|
||||
# endif
|
||||
# elif defined(__s390__)
|
||||
# define systemd_NR_statx 379
|
||||
# elif defined(__sparc__)
|
||||
# define systemd_NR_statx 360
|
||||
# elif defined(__x86_64__)
|
||||
# if defined(__ILP32__)
|
||||
# define systemd_NR_statx (332 | /* __X32_SYSCALL_BIT */ 0x40000000)
|
||||
# else
|
||||
# define systemd_NR_statx 332
|
||||
# endif
|
||||
# elif !defined(missing_arch_template)
|
||||
# warning "statx() syscall number is unknown for your architecture"
|
||||
# endif
|
||||
|
||||
/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
|
||||
# if defined __NR_statx && __NR_statx >= 0
|
||||
# if defined systemd_NR_statx
|
||||
G_STATIC_ASSERT (__NR_statx == systemd_NR_statx);
|
||||
# endif
|
||||
# else
|
||||
# if defined __NR_statx
|
||||
# undef __NR_statx
|
||||
# endif
|
||||
# if defined systemd_NR_statx && systemd_NR_statx >= 0
|
||||
# define __NR_statx systemd_NR_statx
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(HAVE_GLNX_STATX) && defined(__NR_statx)
|
||||
#define GLNX_STATX_TYPE 0x00000001U /* Want/got stx_mode & S_IFMT */
|
||||
#define GLNX_STATX_MODE 0x00000002U /* Want/got stx_mode & ~S_IFMT */
|
||||
#define GLNX_STATX_NLINK 0x00000004U /* Want/got stx_nlink */
|
||||
#define GLNX_STATX_UID 0x00000008U /* Want/got stx_uid */
|
||||
#define GLNX_STATX_GID 0x00000010U /* Want/got stx_gid */
|
||||
#define GLNX_STATX_ATIME 0x00000020U /* Want/got stx_atime */
|
||||
#define GLNX_STATX_MTIME 0x00000040U /* Want/got stx_mtime */
|
||||
#define GLNX_STATX_CTIME 0x00000080U /* Want/got stx_ctime */
|
||||
#define GLNX_STATX_INO 0x00000100U /* Want/got stx_ino */
|
||||
#define GLNX_STATX_SIZE 0x00000200U /* Want/got stx_size */
|
||||
#define GLNX_STATX_BLOCKS 0x00000400U /* Want/got stx_blocks */
|
||||
#define GLNX_STATX_BASIC_STATS 0x000007ffU /* The stuff in the normal stat struct */
|
||||
#define GLNX_STATX_BTIME 0x00000800U /* Want/got stx_btime */
|
||||
#define GLNX_STATX_MNT_ID 0x00001000U /* Got stx_mnt_id */
|
||||
#define GLNX_STATX_DIOALIGN 0x00002000U /* Want/got direct I/O alignment info */
|
||||
#define GLNX_STATX_MNT_ID_UNIQUE 0x00004000U /* Want/got extended stx_mount_id */
|
||||
#define GLNX_STATX_SUBVOL 0x00008000U /* Want/got stx_subvol */
|
||||
#define GLNX_STATX_WRITE_ATOMIC 0x00010000U /* Want/got atomic_write_* fields */
|
||||
#define GLNX_STATX_DIO_READ_ALIGN 0x00020000U /* Want/got dio read alignment info */
|
||||
#define GLNX_STATX__RESERVED 0x80000000U /* Reserved for future struct statx expansion */
|
||||
|
||||
struct glnx_statx_timestamp
|
||||
{
|
||||
int64_t tv_sec;
|
||||
uint32_t tv_nsec;
|
||||
int32_t __reserved;
|
||||
};
|
||||
|
||||
struct glnx_statx
|
||||
{
|
||||
uint32_t stx_mask;
|
||||
uint32_t stx_blksize;
|
||||
uint64_t stx_attributes;
|
||||
uint32_t stx_nlink;
|
||||
uint32_t stx_uid;
|
||||
uint32_t stx_gid;
|
||||
uint16_t stx_mode;
|
||||
uint16_t __spare0[1];
|
||||
uint64_t stx_ino;
|
||||
uint64_t stx_size;
|
||||
uint64_t stx_blocks;
|
||||
uint64_t stx_attributes_mask;
|
||||
struct glnx_statx_timestamp stx_atime;
|
||||
struct glnx_statx_timestamp stx_btime;
|
||||
struct glnx_statx_timestamp stx_ctime;
|
||||
struct glnx_statx_timestamp stx_mtime;
|
||||
uint32_t stx_rdev_major;
|
||||
uint32_t stx_rdev_minor;
|
||||
uint32_t stx_dev_major;
|
||||
uint32_t stx_dev_minor;
|
||||
uint64_t stx_mnt_id;
|
||||
uint32_t stx_dio_mem_align;
|
||||
uint32_t stx_dio_offset_align;
|
||||
uint64_t stx_subvol;
|
||||
uint32_t stx_atomic_write_unit_min;
|
||||
uint32_t stx_atomic_write_unit_max;
|
||||
uint32_t stx_atomic_write_segments_max;
|
||||
uint32_t stx_dio_read_offset_align;
|
||||
uint32_t stx_atomic_write_unit_max_opt;
|
||||
uint32_t __spare2[1];
|
||||
uint64_t __spare3[8];
|
||||
};
|
||||
|
||||
static inline int
|
||||
glnx_statx_syscall (int dfd,
|
||||
const char *filename,
|
||||
unsigned flags,
|
||||
unsigned int mask,
|
||||
struct glnx_statx *buf)
|
||||
{
|
||||
memset (buf, 0xbf, sizeof (*buf));
|
||||
return syscall (__NR_statx, dfd, filename, flags, mask, buf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define HAVE_GLNX_STATX
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user