12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- From eca94dccba29fb2862884472ae8d30672480f8f4 Mon Sep 17 00:00:00 2001
- From: Stefan O'Rear <sorear@fastmail.com>
- 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 <sys/sysmacros.h>
- #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
|