From eca94dccba29fb2862884472ae8d30672480f8f4 Mon Sep 17 00:00:00 2001 From: Stefan O'Rear Date: Thu, 3 Sep 2020 03:45:08 -0400 Subject: [PATCH 05/16] Add src/internal/statx.h We need to make internal syscalls to SYS_statx when SYS_fstatat is not available without changing the musl API. --- src/internal/statx.h | 28 ++++++++++++++++++++++++++++ src/stat/fstatat.c | 28 ++-------------------------- 2 files changed, 30 insertions(+), 26 deletions(-) create mode 100644 src/internal/statx.h diff --git a/src/internal/statx.h b/src/internal/statx.h new file mode 100644 index 00000000..46b16f62 --- /dev/null +++ b/src/internal/statx.h @@ -0,0 +1,28 @@ +struct 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 pad1; + uint64_t stx_ino; + uint64_t stx_size; + uint64_t stx_blocks; + uint64_t stx_attributes_mask; + struct { + int64_t tv_sec; + uint32_t tv_nsec; + int32_t pad; + } stx_atime, stx_btime, stx_ctime, stx_mtime; + uint32_t stx_rdev_major; + uint32_t stx_rdev_minor; + uint32_t stx_dev_major; + uint32_t stx_dev_minor; + uint64_t spare[14]; +}; + +#define STATX_TYPE 0x001U +#define STATX_SIZE 0x200U +#define STATX_BASIC_STATS 0x7ffU diff --git a/src/stat/fstatat.c b/src/stat/fstatat.c index de165b5c..230a83fc 100644 --- a/src/stat/fstatat.c +++ b/src/stat/fstatat.c @@ -7,37 +7,13 @@ #include #include "syscall.h" #include "kstat.h" - -struct 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 pad1; - uint64_t stx_ino; - uint64_t stx_size; - uint64_t stx_blocks; - uint64_t stx_attributes_mask; - struct { - int64_t tv_sec; - uint32_t tv_nsec; - int32_t pad; - } stx_atime, stx_btime, stx_ctime, stx_mtime; - uint32_t stx_rdev_major; - uint32_t stx_rdev_minor; - uint32_t stx_dev_major; - uint32_t stx_dev_minor; - uint64_t spare[14]; -}; +#include "statx.h" static int fstatat_statx(int fd, const char *restrict path, struct stat *restrict st, int flag) { struct statx stx; - int ret = __syscall(SYS_statx, fd, path, flag, 0x7ff, &stx); + int ret = __syscall(SYS_statx, fd, path, flag, STATX_BASIC_STATS, &stx); if (ret) return ret; *st = (struct stat){ -- 2.29.2