[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);
+#else
+  return syscall_checked<int>(SYS_statfs, path, buf);
----------------
labath wrote:

It would be nice to add something like `static_assert(sizeof(struct statfs::f_blocks) == sizeof(long))` (here and in the other wrapper), like we have with time-based syscalls. This would catch attempts to run this on a 32-bit systems (due to old kernel headers or something).

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


More information about the libc-commits mailing list