summaryrefslogtreecommitdiff
path: root/tests/sys_stat_test.cpp
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2020-02-21 23:21:28 -0800
committerElliott Hughes <enh@google.com>2020-02-23 11:36:53 -0800
commit733cedd1c4696ea74dab34d629ef7ac28ecc2200 (patch)
tree6f24227b01f5bfea254d364bd90ee5a1067d4408 /tests/sys_stat_test.cpp
parentfcbdba22ab1c84825bd1e4cd18f8298c87991a5b (diff)
Add a libc wrapper for statx(2).
Bug: http://b/127675384 Bug: http://b/146676114 Test: treehugger Change-Id: I844edc12f62717e579870a040cf03dfe60dc280b
Diffstat (limited to 'tests/sys_stat_test.cpp')
-rw-r--r--tests/sys_stat_test.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/sys_stat_test.cpp b/tests/sys_stat_test.cpp
index 97bf58026..71591c0c2 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 @@ TEST(sys_stat, stat64_lstat64_fstat64) {
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);