[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