[libc-commits] [libc] [libc] Refactor statfs Linux syscalls and provide 'struct statfs' (PR #212930)

Pavel Labath via libc-commits libc-commits at lists.llvm.org
Thu Jul 30 06:31:31 PDT 2026


================
@@ -0,0 +1,38 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Syscall wrapper for statfs.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC___SUPPORT_OSUTIL_SYSCALL_WRAPPERS_STATFS_H
+#define LLVM_LIBC_SRC___SUPPORT_OSUTIL_SYSCALL_WRAPPERS_STATFS_H
+
+#include "hdr/types/struct_statfs.h"
+#include "src/__support/OSUtil/linux/syscall.h" // For syscall_checked
+#include "src/__support/common.h"
+#include "src/__support/error_or.h"
+#include "src/__support/macros/config.h"
+#include <sys/syscall.h> // For syscall numbers
+
+namespace LIBC_NAMESPACE_DECL {
+namespace linux_syscalls {
+
+LIBC_INLINE ErrorOr<int> statfs(const char *path, struct statfs *buf) {
+#ifdef SYS_statfs64
+  return syscall_checked<int>(SYS_statfs64, path, sizeof(*buf), buf);
----------------
labath wrote:

I realized that this would not be correct in overlay mode, if we're building with _FILE_OFFSET_BITS=32 (as struct statfs would refer to the 32-bit version of the struct, at least on glibc). For time_t, we have at least one assertion that ensures that time_t is 64-bit, so it might be good to have something like that here as well (assuming we don't actually want to support those configurations). Something like `static_assert(sizeof(struct statfs::f_blocks) == 8))` should do the trick.

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


More information about the libc-commits mailing list