[libc-commits] [libc] b6a0802 - [libc][NFC] Clean up utimes and setsid (#155495)

via libc-commits libc-commits at lists.llvm.org
Tue Aug 26 16:31:12 PDT 2025


Author: Michael Jones
Date: 2025-08-26T16:31:09-07:00
New Revision: b6a0802deacb977b806fc8b21f7d3af219546456

URL: https://github.com/llvm/llvm-project/commit/b6a0802deacb977b806fc8b21f7d3af219546456
DIFF: https://github.com/llvm/llvm-project/commit/b6a0802deacb977b806fc8b21f7d3af219546456.diff

LOG: [libc][NFC] Clean up utimes and setsid (#155495)

Simplify utims a bit and add proper error handling to setsid as
described in the standard

Added: 
    

Modified: 
    libc/src/sys/time/linux/utimes.cpp
    libc/src/unistd/linux/setsid.cpp

Removed: 
    


################################################################################
diff  --git a/libc/src/sys/time/linux/utimes.cpp b/libc/src/sys/time/linux/utimes.cpp
index 9c00ce9909f2f..e740190bc8198 100644
--- a/libc/src/sys/time/linux/utimes.cpp
+++ b/libc/src/sys/time/linux/utimes.cpp
@@ -21,24 +21,21 @@
 
 namespace LIBC_NAMESPACE_DECL {
 
-#ifdef SYS_utimes
-constexpr auto UTIMES_SYSCALL_ID = SYS_utimes;
-#elif defined(SYS_utimensat)
-constexpr auto UTIMES_SYSCALL_ID = SYS_utimensat;
-#elif defined(SYS_utimensat_time64)
-constexpr auto UTIMES_SYSCALL_ID = SYS_utimensat_time64;
-#else
-#error "utimes, utimensat, utimensat_time64,  syscalls not available."
-#endif
-
 LLVM_LIBC_FUNCTION(int, utimes,
                    (const char *path, const struct timeval times[2])) {
   int ret;
 
 #ifdef SYS_utimes
   // No need to define a timespec struct, use the syscall directly.
-  ret = LIBC_NAMESPACE::syscall_impl<int>(UTIMES_SYSCALL_ID, path, times);
+  ret = LIBC_NAMESPACE::syscall_impl<int>(SYS_utimes, path, times);
 #elif defined(SYS_utimensat) || defined(SYS_utimensat_time64)
+
+#if defined(SYS_utimensat)
+  constexpr auto UTIMES_SYSCALL_ID = SYS_utimensat;
+#elif defined(SYS_utimensat_time64)
+  constexpr auto UTIMES_SYSCALL_ID = SYS_utimensat_time64;
+#endif
+
   // the utimensat syscall requires a timespec struct, not timeval.
   struct timespec ts[2];
   struct timespec *ts_ptr = nullptr; // default value if times is nullptr
@@ -74,6 +71,9 @@ LLVM_LIBC_FUNCTION(int, utimes,
   // flags=0 means don't follow symlinks (like utimes)
   ret = LIBC_NAMESPACE::syscall_impl<int>(UTIMES_SYSCALL_ID, AT_FDCWD, path,
                                           ts_ptr, 0);
+
+#else
+#error "utimes, utimensat, utimensat_time64,  syscalls not available."
 #endif // SYS_utimensat
 
   if (ret < 0) {

diff  --git a/libc/src/unistd/linux/setsid.cpp b/libc/src/unistd/linux/setsid.cpp
index df4629bb326cc..b1a265c9a01dd 100644
--- a/libc/src/unistd/linux/setsid.cpp
+++ b/libc/src/unistd/linux/setsid.cpp
@@ -11,6 +11,7 @@
 #include "hdr/types/pid_t.h"
 #include "src/__support/OSUtil/syscall.h" // For internal syscall function.
 #include "src/__support/common.h"
+#include "src/__support/libc_errno.h"
 #include "src/__support/macros/config.h"
 
 #include <sys/syscall.h> // For syscall numbers.
@@ -18,7 +19,12 @@
 namespace LIBC_NAMESPACE_DECL {
 
 LLVM_LIBC_FUNCTION(pid_t, setsid, ()) {
-  return LIBC_NAMESPACE::syscall_impl<pid_t>(SYS_setsid);
+  pid_t ret = LIBC_NAMESPACE::syscall_impl<pid_t>(SYS_setsid);
+  if (ret < 0) {
+    libc_errno = static_cast<int>(-ret);
+    return -1;
+  }
+  return ret;
 }
 
 } // namespace LIBC_NAMESPACE_DECL


        


More information about the libc-commits mailing list