[libc-commits] [libc] [libc] Refactor sysinfo (PR #221498)

via libc-commits libc-commits at lists.llvm.org
Sat Sep 5 14:58:21 PDT 2026


https://github.com/afnrow created https://github.com/llvm/llvm-project/pull/221498

Refactor the sysinfo linux wrapper to use int type instead of ErrorOR.

Suggested-by: michael-jr (https://github.com/llvm/llvm-project/pull/221049)


>From cdd337df603dc1f60b688f270ef8029043a946a8 Mon Sep 17 00:00:00 2001
From: yahia ahmed <yahia.a.abdrabou at gmail.com>
Date: Sun, 6 Sep 2026 00:54:19 +0300
Subject: [PATCH] [libc] Refactor sysinfo

---
 libc/src/__support/OSUtil/linux/syscall_wrappers/sysinfo.h | 4 ++--
 libc/src/stdlib/linux/getloadavg.cpp                       | 5 ++---
 libc/src/sys/sysinfo/linux/sysinfo.cpp                     | 7 ++++---
 libc/src/unistd/linux/sysconf.cpp                          | 6 +++---
 4 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/libc/src/__support/OSUtil/linux/syscall_wrappers/sysinfo.h b/libc/src/__support/OSUtil/linux/syscall_wrappers/sysinfo.h
index ef2b7a3f582e5..7a0cd1a9cc84f 100644
--- a/libc/src/__support/OSUtil/linux/syscall_wrappers/sysinfo.h
+++ b/libc/src/__support/OSUtil/linux/syscall_wrappers/sysinfo.h
@@ -24,8 +24,8 @@
 namespace LIBC_NAMESPACE_DECL {
 namespace linux_syscalls {
 
-LIBC_INLINE ErrorOr<int> sysinfo(struct sysinfo *info) {
-  return syscall_checked<int>(SYS_sysinfo, info);
+LIBC_INLINE int sysinfo(struct sysinfo *info) {
+  return LIBC_NAMESPACE::syscall_impl<int>(SYS_sysinfo, info);
 }
 
 } // namespace linux_syscalls
diff --git a/libc/src/stdlib/linux/getloadavg.cpp b/libc/src/stdlib/linux/getloadavg.cpp
index 7bad028f77716..d8b44729ed2b5 100644
--- a/libc/src/stdlib/linux/getloadavg.cpp
+++ b/libc/src/stdlib/linux/getloadavg.cpp
@@ -26,9 +26,8 @@ LLVM_LIBC_FUNCTION(int, getloadavg, (double loadavg[], int nelem)) {
     return 0;
 
   struct sysinfo info;
-  auto result = linux_syscalls::sysinfo(&info);
-  if (!result) {
-    libc_errno = result.error();
+  int result = linux_syscalls::sysinfo(&info);
+  if (result < 0) {
     return -1;
   }
 
diff --git a/libc/src/sys/sysinfo/linux/sysinfo.cpp b/libc/src/sys/sysinfo/linux/sysinfo.cpp
index 1b9504e99f1a5..3acadd996dd81 100644
--- a/libc/src/sys/sysinfo/linux/sysinfo.cpp
+++ b/libc/src/sys/sysinfo/linux/sysinfo.cpp
@@ -13,6 +13,7 @@
 
 #include "src/sys/sysinfo/sysinfo.h"
 
+#include "hdr/errno_macros.h"
 #include "hdr/types/struct_sysinfo.h"
 #include "src/__support/OSUtil/linux/syscall_wrappers/sysinfo.h"
 #include "src/__support/common.h"
@@ -22,9 +23,9 @@
 namespace LIBC_NAMESPACE_DECL {
 
 LLVM_LIBC_FUNCTION(int, sysinfo, (struct sysinfo * info)) {
-  auto result = linux_syscalls::sysinfo(info);
-  if (!result) {
-    libc_errno = result.error();
+  int result = linux_syscalls::sysinfo(info);
+  if (result < 0) {
+    libc_errno = -result;
     return -1;
   }
   return 0;
diff --git a/libc/src/unistd/linux/sysconf.cpp b/libc/src/unistd/linux/sysconf.cpp
index 0e55a9e4db335..2608f28e8b0e4 100644
--- a/libc/src/unistd/linux/sysconf.cpp
+++ b/libc/src/unistd/linux/sysconf.cpp
@@ -100,9 +100,9 @@ long get_nprocessors_onln() {
 
 long get_phys_pages() {
   struct ::sysinfo info;
-  ErrorOr<int> ret = linux_syscalls::sysinfo(&info);
-  if (!ret) {
-    libc_errno = -ret.error();
+  int ret = linux_syscalls::sysinfo(&info);
+  if (ret < 0) {
+    libc_errno = -ret;
     return -1;
   }
   cpp::optional<unsigned long> page_size = auxv::get(AT_PAGESZ);



More information about the libc-commits mailing list