Add a libc wrapper for statx(2).
Bug: http://b/127675384
Bug: http://b/146676114
Test: treehugger
Change-Id: I844edc12f62717e579870a040cf03dfe60dc280b
diff --git a/tests/sys_stat_test.cpp b/tests/sys_stat_test.cpp
index 97bf580..71591c0 100644
--- a/tests/sys_stat_test.cpp
+++ b/tests/sys_stat_test.cpp
@@ -22,6 +22,14 @@
#include <android-base/file.h>
#include <gtest/gtest.h>
+#if defined(__BIONIC__)
+#define HAVE_STATX
+#elif defined(__GLIBC_PREREQ)
+#if __GLIBC_PREREQ(2, 28)
+#define HAVE_STATX
+#endif
+#endif
+
TEST(sys_stat, futimens) {
FILE* fp = tmpfile();
ASSERT_TRUE(fp != nullptr);
@@ -95,6 +103,24 @@
close(fd);
}
+TEST(sys_stat, statx) {
+#if defined(HAVE_STATX)
+ struct statx sx;
+ int rc = statx(AT_FDCWD, "/proc/version", AT_STATX_SYNC_AS_STAT, STATX_ALL, &sx);
+ if (rc == -1 && errno == ENOSYS) {
+ GTEST_SKIP() << "statx returned ENOSYS";
+ return;
+ }
+ ASSERT_EQ(0, rc);
+ struct stat64 sb;
+ ASSERT_EQ(0, stat64("/proc/version", &sb));
+ EXPECT_EQ(sb.st_ino, sx.stx_ino);
+ EXPECT_EQ(sb.st_mode, sx.stx_mode);
+#else
+ GTEST_SKIP() << "statx not available";
+#endif
+}
+
TEST(sys_stat, fchmodat_EFAULT_file) {
ASSERT_EQ(-1, fchmodat(AT_FDCWD, (char *) 0x1, 0751, 0));
ASSERT_EQ(EFAULT, errno);