aboutsummaryrefslogtreecommitdiffstats
path: root/file.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-02-20 04:02:30 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-02-20 04:02:30 +0000
commit10deba066e207eb142e7b61b1479c8af4016b247 (patch)
tree61791e3043df93fe56657142b0e53ceba958a23b /file.c
parent5210b89fd730815ba2510b09a890910a7995a4a1 (diff)
downloadruby-10deba066e207eb142e7b61b1479c8af4016b247.tar.gz
Try statx syscall
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67093 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r--file.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/file.c b/file.c
index c00c43e5d4..af0d44e9ba 100644
--- a/file.c
+++ b/file.c
@@ -1112,6 +1112,23 @@ stat_without_gvl(const char *path, struct stat *st)
RUBY_UBF_IO, NULL);
}
+#if !defined HAVE_STATX && defined __linux__
+# ifdef HAVE_SYSCALL_H
+# include <syscall.h>
+# elif defined HAVE_SYS_SYSCALL_H
+# include <sys/syscall.h>
+# endif
+# if defined __NR_statx
+# include <linux/stat.h>
+static int statx(int dirfd, const char *pathname, int flags,
+ unsigned int mask, struct statx *statxbuf)
+{
+ return syscall(__NR_statx, dirfd, pathname, flags, mask, statxbuf);
+}
+# define HAVE_STATX
+# endif
+#endif
+
#ifdef HAVE_STATX
typedef struct no_gvl_statx_data {
struct statx *stx;