[libc-commits] [libc] [libc] Add backwards-compatibility macro to struct stat. (PR #182601)

via libc-commits libc-commits at lists.llvm.org
Fri Feb 20 14:13:17 PST 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libc

Author: Alexey Samsonov (vonosmas)

<details>
<summary>Changes</summary>

Older code may use `st_atime` which recorded timestamps with one-second precision, instead of `struct timespec st_atim` that is available in later POSIX versions.

Add `#define st_atime` (& friends) to type declaration as suggested in https://man7.org/linux/man-pages/man3/stat.3type.html

---
Full diff: https://github.com/llvm/llvm-project/pull/182601.diff


2 Files Affected:

- (modified) libc/include/llvm-libc-types/struct_stat.h (+5) 
- (modified) libc/test/src/sys/time/utimes_test.cpp (+4) 


``````````diff
diff --git a/libc/include/llvm-libc-types/struct_stat.h b/libc/include/llvm-libc-types/struct_stat.h
index 4026679f8d67f..599194af62737 100644
--- a/libc/include/llvm-libc-types/struct_stat.h
+++ b/libc/include/llvm-libc-types/struct_stat.h
@@ -34,6 +34,11 @@ struct stat {
   struct timespec st_ctim;
   blksize_t st_blksize;
   blkcnt_t st_blocks;
+  // Backwards compatibility macros for older kernel/standards
+  // that recorded timestamps in stat with one-second precision.
+  #define st_atime st_atim.tv_sec
+  #define st_mtime st_mtim.tv_sec
+  #define st_ctime st_ctim.tv_sec
 };
 
 #endif // LLVM_LIBC_TYPES_STRUCT_STAT_H
diff --git a/libc/test/src/sys/time/utimes_test.cpp b/libc/test/src/sys/time/utimes_test.cpp
index 36c1e8b75d514..2501c7385bd2e 100644
--- a/libc/test/src/sys/time/utimes_test.cpp
+++ b/libc/test/src/sys/time/utimes_test.cpp
@@ -57,6 +57,10 @@ TEST_F(LlvmLibcUtimesTest, ChangeTimesSpecific) {
   ASSERT_EQ(statbuf.st_mtim.tv_nsec,
             static_cast<long>(times[1].tv_usec * 1000));
 
+  // legacy way to check seconds
+  ASSERT_EQ(statbuf.st_atime, times[0].tv_sec);
+  ASSERT_EQ(statbuf.st_mtime, times[1].tv_sec);
+
   ASSERT_THAT(LIBC_NAMESPACE::remove(TEST_FILE), Succeeds(0));
 }
 

``````````

</details>


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


More information about the libc-commits mailing list