[libc-commits] [libc] [libc] Add backwards-compatibility macro to struct stat. (PR #182601)
Alexey Samsonov via libc-commits
libc-commits at lists.llvm.org
Fri Feb 20 14:12:45 PST 2026
https://github.com/vonosmas created https://github.com/llvm/llvm-project/pull/182601
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
>From fb284d0307c1a8e15cf19571c7b4f4fbed1f71a4 Mon Sep 17 00:00:00 2001
From: Alexey Samsonov <vonosmas at gmail.com>
Date: Fri, 20 Feb 2026 22:09:40 +0000
Subject: [PATCH] [libc] Add backwards-compatibility macro to struct stat.
---
libc/include/llvm-libc-types/struct_stat.h | 5 +++++
libc/test/src/sys/time/utimes_test.cpp | 4 ++++
2 files changed, 9 insertions(+)
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));
}
More information about the libc-commits
mailing list