[libc-commits] [libc] [libc] add statvfs/fstatvfs (PR #86169)

Nick Desaulniers via libc-commits libc-commits at lists.llvm.org
Fri Mar 22 09:44:28 PDT 2024


================
@@ -0,0 +1,47 @@
+#include "src/sys/statvfs/linux/statfs_utils.h"
+#include "src/sys/statvfs/statvfs.h"
+#include "test/UnitTest/ErrnoSetterMatcher.h"
+#include "test/UnitTest/LibcTest.h"
+#include <linux/magic.h>
+using namespace LIBC_NAMESPACE::testing::ErrnoSetterMatcher;
+
+namespace LIBC_NAMESPACE {
+static int statfs(const char *path, struct statfs *buf) {
+  using namespace statfs_utils;
+  if (cpp::optional<LinuxStatFs> result = linux_statfs(path)) {
+    *buf = *result;
+    return 0;
+  }
+  return -1;
+}
+} // namespace LIBC_NAMESPACE
+
+TEST(LlvmLibcSysStatfsTest, StatfsBasic) {
+  statfs buf[1];
+  ASSERT_THAT(LIBC_NAMESPACE::statfs("/", buf), Succeeds());
+  ASSERT_THAT(LIBC_NAMESPACE::statfs("/proc", buf), Succeeds());
+  ASSERT_EQ(buf->f_type, static_cast<decltype(buf->f_type)>(PROC_SUPER_MAGIC));
+  ASSERT_THAT(LIBC_NAMESPACE::statfs("/sys", buf), Succeeds());
+  ASSERT_EQ(buf->f_type, static_cast<decltype(buf->f_type)>(SYSFS_MAGIC));
+}
+
+TEST(LlvmLibcSysStatfsTest, StatvfsInvalidPath) {
+  statvfs buf[1];
+  ASSERT_THAT(LIBC_NAMESPACE::statvfs("", buf), Fails(ENOENT));
+  ASSERT_THAT(LIBC_NAMESPACE::statvfs("/nonexistent", buf), Fails(ENOENT));
+  ASSERT_THAT(LIBC_NAMESPACE::statvfs("/dev/null/whatever", buf),
+              Fails(ENOTDIR));
+  ASSERT_THAT(LIBC_NAMESPACE::statvfs(nullptr, buf), Fails(EFAULT));
+}
+
+TEST(LlvmLibcSysStatfsTest, StatvfsNameTooLong) {
+  statvfs buf[1];
----------------
nickdesaulniers wrote:

an array on 1 looks funny.  Just declare a single scalar instance, then pass the address of it to your helper. Same for the other test file.

https://github.com/llvm/llvm-project/pull/86169


More information about the libc-commits mailing list